返回首页
当前位置: 主页 > 网络编程 > Android教程 >

通过Android自定义View实现刮刮乐抽奖效果

时间:2019-11-21 14:11来源:知行网www.zhixing123.cn 编辑:麦田守望者

 本文将为大家介绍如何在安卓开发中如何通过自定义View实现刮刮乐抽奖效果,代码如下:

1.package com.netease.paint.xfermode;
2.
3.import android.content.Context;
4.import android.graphics.Bitmap;
5.import android.graphics.BitmapFactory;
6.import android.graphics.Canvas;
7.import android.graphics.Color;
8.import android.graphics.Paint;
9.import android.graphics.Path;
10.import android.graphics.PorterDuff;
11.import android.graphics.PorterDuffXfermode;
12.import android.util.AttributeSet;
13.import android.view.MotionEvent;
14.import android.view.View;
15.
16.public class XfermodeEraserView extends View {
17.
18.    private Paint  mPaint;
19.    private Bitmap mDstBmp, mSrcBmp, mTxtBmp;
20.    private Path mPath;
21.
22.    public XfermodeEraserView(Context context) {
23.        this(context, null);
24.    }
25.
26.    public XfermodeEraserView(Context context, AttributeSet attrs) {
27.        this(context, attrs, 0);
28.    }
29.
30.    public XfermodeEraserView(Context context, AttributeSet attrs, int defStyleAttr) {
31.        super(context, attrs, defStyleAttr);
32.        init();
33.    }
34.
35.    private void init() {
36.        //初始化画笔
37.        mPaint = new Paint();
38.        mPaint.setColor(Color.RED);
39.        mPaint.setStyle(Paint.Style.STROKE);
40.        mPaint.setStrokeWidth(80);
41.
42.        //禁用硬件加速
43.        setLayerType(View.LAYER_TYPE_SOFTWARE, null);
44.
45.        //初始化图片对象
46.        mTxtBmp = BitmapFactory.decodeResource(getResources(), R.drawable.result);
47.        mSrcBmp = BitmapFactory.decodeResource(getResources(), R.drawable.eraser);
48.        mDstBmp = Bitmap.createBitmap(mSrcBmp.getWidth(), mSrcBmp.getHeight(), Bitmap.Config.ARGB_8888);
49.
50.        //路径(贝塞尔曲线)
51.        mPath = new Path();
52.    }
53.
54.
55.    @Override
56.    protected void onDraw(Canvas canvas) {
57.        super.onDraw(canvas);
58.
59.        //绘制刮奖结果
60.        canvas.drawBitmap(mTxtBmp, 0, 0, mPaint);
61.
62.        //使用离屏绘制
63.        int layerID = canvas.saveLayer(0, 0, getWidth(), getHeight(), mPaint, Canvas.ALL_SAVE_FLAG);
64.
65.        //先将路径绘制到 bitmap上
66.        Canvas dstCanvas = new Canvas(mDstBmp);
67.        dstCanvas.drawPath(mPath, mPaint);
68.
69.        //绘制 目标图像
70.        canvas.drawBitmap(mDstBmp, 0, 0, mPaint);
71.        //设置 模式 为 SRC_OUT, 擦橡皮区域为交集区域需要清掉像素
72.        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));
73.        //绘制源图像
74.        canvas.drawBitmap(mSrcBmp, 0, 0, mPaint);
75.        //清楚原图
76.        mPaint.setXfermode(null);
77.
78.        canvas.restoreToCount(layerID);
79.    }
80.
81.    private float mEventX, mEventY;
82.
83.    @Override
84.    public boolean onTouchEvent(MotionEvent event) {
85.        super.onTouchEvent(event);
86.        switch (event.getAction()) {  //监听触摸事件
87.            case MotionEvent.ACTION_DOWN:
88.                mEventX = event.getX();
89.                mEventY = event.getY();
90.                mPath.moveTo(mEventX, mEventY);
91.                break;
92.            case MotionEvent.ACTION_MOVE:
93.                float endX = (event.getX() - mEventX) / 2 + mEventX;
94.                float endY = (event.getY() - mEventY) / 2 + mEventY;
95.                //画二阶贝塞尔曲线
96.                mPath.quadTo(mEventX, mEventY, endX, endY);
97.                mEventX = event.getX();
98.                mEventY = event.getY();
99.                break;
100.        }
101.        invalidate();
102.        return true; //消费事件
103.    }
104.
105.}
------分隔线----------------------------
标签(Tag):
------分隔线----------------------------
推荐内容
  • Android手机系统故障排除大全?

    在Android手机的使用过程中,难免遇到各种各样的奇怪问题,比如应用闪退、无辜卡顿、...

  • 手机端OCR识别软件(IOS/Android)使用图解教程

    为大家带来一款手机端OCR识别软件,轻松把图片上的文字转换成可编辑的文档。 接下来出...

  • 电脑怎么发短信到手机?电脑发短信到手机的操作技巧

    我们有时候工作中,常常会遇到短信群发的情况,可是一条一条的发,很繁琐,也很不方便...

  • 手机如何控制电脑?手机控制电脑软件哪个好用

    很多网友们可能因为工作需要的原因,要远程控制自己的电脑或者其他的移动设备,这个时...

  • 安卓手机怎么连接电脑?安卓手机连接电脑的方法

    有些安卓的手机用户们在使用电脑的过程中,下载软件,往电脑上传照片视频时还是不会,...

  • 三星手机连接电脑的操作方法图解教程

    如果想要将手机里的多媒体文件导出到电脑,或者将电脑中的文件导入到手机。那么,通过...

  • 猜你感兴趣
  • 教育技术学动态
  • 教育技术学论文
  • 理论研究
  • 应用研究
  • 资源收藏
  • 百家观点
  • 英文文献
  • 中国电化教育
  • 电化教育研究
  • 中国远程教育
  • 开放教育研究
  • 现代教育技术
  • 远程教育杂志
  • 现代远距离教育
  • 中国教育信息化
  • 中国信息技术教育
  • 中小学信息技术
  • Flash龙8娱乐官网手机版
  • Photoshop龙8娱乐官网手机版
  • 3DMAX龙8娱乐官网手机版
  • AutoCAD龙8娱乐官网手机版
  • CorelDRAW龙8娱乐官网手机版
  • Matlab龙8娱乐官网手机版
  • 其他龙8娱乐官网手机版
  • .Net龙8娱乐官网手机版
  • Asp龙8娱乐官网手机版
  • Php龙8娱乐官网手机版
  • Jsp龙8娱乐官网手机版
  • Ajax龙8娱乐官网手机版
  • Android教程
  • 其他龙8娱乐官网手机版
  • Word教程
  • Excel教程
  • PowerPoint教程
  • Ubuntu教程
  • 其他教程
  • 课件下载
  • 软件下载
  • 视频教程下载
  • 其他下载
  • 教案大全
  • 试题大全
  • 课件大全
  • 其他大全
  • 人像摄影
  • 风光摄影