仿刮刮乐刮奖效果

简介: <div id="article_content" class="article_content"><span style="font-size:14px">该功能实现很简单,就是根据手指坐标位置在画板上画</span> <h1><a target="_blank" name="t0"></a><span style="color:#cc0000">1.效果图</span></h1
该功能实现很简单,就是根据手指坐标位置在画板上画

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


目录
相关文章
|
缓存 Linux
Centos7配置国内yum源和epel源
本篇内容记录了Centos7如何配置国内yum源和epel源。
4761 0
|
3月前
|
弹性计算 Linux 数据安全/隐私保护
【阿里云幻兽帕鲁】搭建 密码 存档 使用 费用 常见问题合集
本文持续更新幻兽帕鲁玩家在阿里云上遇到的问题及解法。
59129 91
【阿里云幻兽帕鲁】搭建 密码 存档 使用 费用 常见问题合集
|
8月前
|
前端开发
如何用canvas实现刮刮乐自助
如何用canvas实现刮刮乐自助
|
8月前
|
Java 数据库连接 数据库
解析Java中的MyBatis Plus注解 @FieldFill:优雅处理字段填充
在数据库操作中,有些字段的值在插入或更新时需要自动填充,比如创建时间、更新时间等。MyBatis Plus作为一款强大的ORM框架,提供了注解 `@FieldFill`,使得开发者能够更加灵活地处理字段的自动填充,从而减少了重复的代码编写。本文将详细介绍 `@FieldFill` 注解的用法及其在持久层开发中的应用。
955 0
|
Linux iOS开发 MacOS
IIS10 部署网站报【HTTP 错误 500.19 - Internal Server Error】的解决办法
原有的 web 发布文件是可以正常部署 IIS10 上面运行的,由于本地电脑环境迁移,重新换了一个宿主机部署 IIS10,网站运行提示如下信息:HTTP 错误 `500.19 - Internal Server Error` 无法访问请求的页面,因为该页的相关配置数据无效。详细错误信息:模块 `IIS Web Core` 通知 `未知 处理程序 尚未确定 错误...
1476 0
IIS10 部署网站报【HTTP 错误 500.19 - Internal Server Error】的解决办法
|
前端开发
刮刮乐,前端代码html+js实现,直接运行
刮刮乐,前端代码html+js实现,直接运行
402 0
刮刮乐,前端代码html+js实现,直接运行
|
流计算 Serverless Java
阿里云活动奖品大盘点(长期更新)
2024.1.4号 更新: 1、ACA/ACP考试折扣
156129 15
阿里云活动奖品大盘点(长期更新)
|
弹性计算 Linux Shell
云服务器ECS 云盘缩容教程步骤来啦!
由于目前云服务器ECS不支持系统盘或者数据盘缩容,如果您有云盘缩容的需求,可用通过阿里云迁云工具达成目的。
2718 0
云服务器ECS 云盘缩容教程步骤来啦!
|
存储 固态存储 虚拟化
新一代服务器预览:M.2 SSD系统盘RAID1方案
Xeon Processor Scalable服务器上的“BOSS”是啥?
3319 0
|
7天前
|
NoSQL Cloud Native Redis
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
阿里云瑶池数据库团队后续将持续参与Valkey社区,如过往在Redis社区一样耕耘,为开源社区作出持续贡献。
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新