专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 移动开发

橡皮擦成效的实现

发布时间:2010-05-30 05:29:32 文章来源:www.iduyao.cn 采编人员:星星草
橡皮擦效果的实现
废话少说,直接贴代码,希望对大家有帮助。

public class DrawView extends View{
	private Canvas pcanvas;
	private Paint paint;
	private Path path;
	
	private Bitmap originBitmap;
	private Bitmap pureBitmp;
	private Bitmap bitmapBuff;
	private float scaleWidth;
	private float scaleHeight;
	private float downx = 0,downy = 0;
	
	public DrawView(Context context) {
		super(context);

        setBackgroundResource(R.drawable.pic);
        path = new Path();
        paint = new Paint();
        paint.setAlpha(0);
        paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
        paint.setAntiAlias(true);
        
        paint.setDither(true);
        paint.setStyle(Paint.Style.STROKE);  
        paint.setStrokeJoin(Paint.Join.ROUND);  
        paint.setStrokeCap(Paint.Cap.ROUND);  
        paint.setStrokeWidth(15.6f); 
        
        initLayer(context);
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		canvas.drawPath(path, paint);
		canvas.drawBitmap(bitmapBuff, 0, 0, null);
	}

    private void initLayer(Context context){
    	InputStream stream = context.getResources().openRawResource(R.drawable.layer);
        originBitmap = BitmapFactory.decodeStream(stream);
        int width = originBitmap.getWidth();
        int height = originBitmap.getHeight();
        
        Display currentDisplay = ((Activity)context).getWindowManager().getDefaultDisplay();
        float newWidth = currentDisplay.getWidth();
        float newHeight = currentDisplay.getHeight();
        
        scaleWidth = ((float) newWidth / width);
        scaleHeight = ((float) newHeight / height);

        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);

        pureBitmp = Bitmap.createBitmap(originBitmap, 0, 0, width, height,matrix, true);
        bitmapBuff = Bitmap.createBitmap(pureBitmp.getWidth(),pureBitmp.getHeight(), Bitmap.Config.ARGB_8888);
        
        pcanvas = new Canvas(bitmapBuff);
        pcanvas.drawBitmap(pureBitmp, 0, 0, null);
    }
    
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		int action = event.getAction();
	    switch (action) {
	    case MotionEvent.ACTION_DOWN:
	      downx = event.getX();
	      downy = event.getY();
	      path.reset();
	      path.moveTo(downx, downy);
	      break;
	    case MotionEvent.ACTION_MOVE:
	      float upx = event.getX();
	      float upy = event.getY();
	      touchMove(upx, upy);
	      invalidate();
	      break;
	    case MotionEvent.ACTION_UP:
	      pcanvas.drawPath(path, paint);
	      path.reset();
	      invalidate();
	      break;
	    case MotionEvent.ACTION_CANCEL:
	      break;
	    default:
	      break;
	    }
		return true;
	}
	
	private void touchMove(float upx, float upy){
		float dx = Math.abs(downx-upx);
	      float dy = Math.abs(downy-upy);
	      if (dx >= 4 || dy >= 4) {
	        path.quadTo(downx, downy, (downx + upx)/2, (downy + upy)/2);
	        downx = upx;
		    downy = upy;
	      }
	}
}
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: