首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

橡皮擦成效的实现

2012-07-01 
橡皮擦效果的实现废话少说,直接贴代码,希望对大家有帮助。public class DrawView extends View{private Can

橡皮擦效果的实现
废话少说,直接贴代码,希望对大家有帮助。

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);}@Overrideprotected 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);    }    @Overridepublic 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;      }}}

热点排行