仿刮刮乐刮奖效果详解手机开发

该功能实现很简单,就是根据手指坐标位置在画板上画

1.效果图

仿刮刮乐刮奖效果详解手机开发          仿刮刮乐刮奖效果详解手机开发

2.代码实现

  1. public class ErinieShow extends RelativeLayout {  
  2.     Context context;  
  3.     RelativeLayout bg;  
  4.     MyView MyView;  
  5.     int level;  
  6.     public ErinieShow(Context context, int level) {  
  7.         super(context);  
  8.         this.context = context;  
  9.         this.level = level;  
  10.           
  11.         bg = new RelativeLayout(context);  
  12.         MyView = new MyView(context);  
  13.         bg.addView(MyView);  
  14.         addView(bg);  
  15.           
  16.         int[] resolution = PhoneUtil.getResolution(context);  
  17.         RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(  
  18.                 resolution[0], PhoneUtil.getFitHeight(context, 125));  
  19.   
  20.         bg.setId(100001);  
  21.         bg.setLayoutParams(params);  
  22.         MyView.setLayoutParams(params);  
  23.           
  24.         switch (level) {  
  25.         case 0:  
  26.             bg.setBackgroundResource(R.drawable.rewardlevel0);  
  27.             break;  
  28.         case 1:  
  29.             bg.setBackgroundResource(R.drawable.rewardlevel1);  
  30.   
  31.             break;  
  32.         case 2:  
  33.             bg.setBackgroundResource(R.drawable.rewardlevel2);  
  34.             break;  
  35.         default:  
  36.             bg.setBackgroundResource(R.drawable.rewardlevel3);  
  37.             break;  
  38.         }  
  39.           
  40.         MyView.init(Color.parseColor(“#d3d3d3”), 3010);  
  41.     }  
  42. }  
  1. public class MyView extends TextView {  
  2.   
  3.     private float TOUCH_TOLERANCE; // 填充距离,使线条更自然,柔和,值越小,越柔和。  
  4.     private Bitmap mBitmap;  
  5.     private Canvas mCanvas;  
  6.     private Paint mPaint;  
  7.     private Path mPath;  
  8.     private float mX, mY;  
  9.     private boolean isDraw = false;  
  10.     int time=0;  
  11.       
  12.     public MyView(Context context) {  
  13.         super(context);  
  14.     }  
  15.   
  16.     @Override  
  17.     protected void onDraw(Canvas canvas) {  
  18.         super.onDraw(canvas);  
  19.         if (isDraw) {  
  20.             mCanvas.drawPath(mPath, mPaint);  
  21.             canvas.drawBitmap(mBitmap, 00null);  
  22.         }  
  23.     }  
  24.   
  25.     /** 
  26.      * 开启檫除功能 
  27.      *  
  28.      * @param bgColor 
  29.      *            覆盖的背景颜色 
  30.      * @param paintStrokeWidth 
  31.      *            触点(橡皮)宽度 
  32.      * @param touchTolerance 
  33.      *            填充距离,值越小,越柔和。 
  34.      */  
  35.     public void init(final int bgColor, final int paintStrokeWidth,  
  36.             float touchTolerance) {  
  37.         TOUCH_TOLERANCE = touchTolerance;  
  38.         // 设置画笔  
  39.         mPaint = new Paint();  
  40.         // mPaint.setAlpha(0);  
  41.         // 画笔划过的痕迹就变成透明色了  
  42.         mPaint.setColor(Color.BLACK); // 此处不能为透明色  
  43.         mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));  
  44.         // 或者  
  45.         // mPaint.setAlpha(0);  
  46.         // mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));  
  47.   
  48.         mPaint.setAntiAlias(true);  
  49.         mPaint.setDither(true);  
  50.         mPaint.setStyle(Paint.Style.STROKE);  
  51.         mPaint.setStrokeJoin(Paint.Join.ROUND); // 前圆角  
  52.         mPaint.setStrokeCap(Paint.Cap.ROUND); // 后圆角  
  53.         mPaint.setStrokeWidth(paintStrokeWidth); // 笔宽  
  54.   
  55.         // 痕迹  
  56.         mPath = new Path();  
  57.         // 覆盖  
  58.         LayoutParams layoutParams = getLayoutParams();  
  59.         int height = layoutParams.height;  
  60.         int width;  
  61.         if (getLayoutParams().width == LayoutParams.MATCH_PARENT) {  
  62.             width = 700;  
  63.         } else {  
  64.             width = layoutParams.width;  
  65.         }  
  66.   
  67.         mBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);  
  68.         mCanvas = new Canvas(mBitmap);  
  69.   
  70.         mCanvas.drawColor(bgColor);  
  71.         isDraw = true;  
  72.     }  
  73.   
  74.     @Override  
  75.     public boolean onTouchEvent(MotionEvent event) {  
  76.         if (!isDraw) {  
  77.             return true;  
  78.         }  
  79.         switch (event.getAction()) {  
  80.         case MotionEvent.ACTION_DOWN: // 触点按下  
  81.             // touchDown(event.getRawX(),event.getRawY());  
  82.             touchDown(event.getX(), event.getY());  
  83.             invalidate();  
  84.             break;  
  85.         case MotionEvent.ACTION_MOVE: // 触点移动  
  86.             touchMove(event.getX(), event.getY());  
  87.             invalidate();  
  88.             break;  
  89.         case MotionEvent.ACTION_UP: // 触点弹起  
  90.             touchUp(event.getX(), event.getY());  
  91.             invalidate();  
  92.             break;  
  93.         default:  
  94.             break;  
  95.         }  
  96.         return true;  
  97.     }  
  98.   
  99.     private void touchDown(float x, float y) {  
  100.         mPath.reset();  
  101.         mPath.moveTo(x, y);  
  102.         mX = x;  
  103.         mY = y;  
  104.     }  
  105.   
  106.     private void touchMove(float x, float y) {  
  107.         float dx = Math.abs(x – mX);  
  108.         float dy = Math.abs(y – mY);  
  109.         if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {  
  110.             mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);  
  111.             mX = x;  
  112.             mY = y;  
  113.         }  
  114.   
  115.     }  
  116.   
  117.     private void touchUp(float x, float y) {  
  118.         mPath.lineTo(x, y);  
  119.         mCanvas.drawPath(mPath, mPaint);  
  120.         mPath.reset();  
  121.     }  
  122.   
  123. }  

源码下载http://download.csdn.net/detail/strawberry2013/7682865

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5805.html

(0)
上一篇 2021年7月17日
下一篇 2021年7月17日

相关推荐

发表回复

登录后才能评论