美文网首页
自定义刮刮卡

自定义刮刮卡

作者: Happy668 | 来源:发表于2017-05-16 16:45 被阅读0次

效果图

效果图

知识点(自定义TextView),重新方法

  • onTouchEvent
  • onDraw
1.自定义变量
   private Bitmap mDownBitmap, mUpBitmap;//图片
    private Paint mPaint; //画笔
    private Canvas mCanvas; //画布
    private Path mPath; //用于绘制复杂的图形轮廓,比如折线,圆弧以及各种复杂图案
2.初始化方法init():
private void init() {
        mPaint = new Paint();
        mPaint.setAlpha(0);//画笔透明度为0
        //使用DST_IN模式将路径绘制到前面覆盖的图层上
        mPaint.setXfermode(
                new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

        mPaint.setStyle(Paint.Style.STROKE);
        //笔触和连接处更加圆滑
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeWidth(50);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPath = new Path();
        mDownBitmap = BitmapFactory.decodeResource(getResources(),
                R.drawable.ic_launcher);
        mUpBitmap = Bitmap.createBitmap(mDownBitmap.getWidth(),
                mDownBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        mCanvas = new Canvas(mUpBitmap);
        mCanvas.drawColor(Color.GRAY);
    }

其中PorterDuffXfermode有16种混合模式的效果


效果图
3.重新onTouchEvent方法:
public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mPath.reset();//清除path设置的所有属性
                mPath.moveTo(event.getX(), event.getY());//将起始轮廓点移至x,y坐标点,默认情况为0,0点
                break;
            case MotionEvent.ACTION_MOVE:
                mPath.lineTo(event.getX(), event.getY()); //用于从当前轮廓点绘制一条线段到x,y点
                break;
        }
        mCanvas.drawPath(mPath, mPaint); //重新绘制Path
        invalidate(); //刷新
        return true;
    }
4.重新onDraw方法:
 protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //绘制图片
        canvas.drawBitmap(mDownBitmap, 0, 0, null);
        canvas.drawBitmap(mUpBitmap, 0, 0, null);
    }
完整版代码:
public class GuaGuaCard extends View {
    private Bitmap mDownBitmap, mUpBitmap;//图片
    private Paint mPaint; //画笔
    private Canvas mCanvas; //画布
    private Path mPath; //用于绘制复杂的图形轮廓,比如折线,圆弧以及各种复杂图案

    public GuaGuaCard(Context context) {
        super(context);
        init();
    }

    public GuaGuaCard(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public GuaGuaCard(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }


    private void init() {
        mPaint = new Paint();
        mPaint.setAlpha(0);//画笔透明度为0
        //使用DST_IN模式将路径绘制到前面覆盖的图层上
        mPaint.setXfermode(
                new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

        mPaint.setStyle(Paint.Style.STROKE);
        //笔触和连接处更加圆滑
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeWidth(50);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPath = new Path();
        mDownBitmap = BitmapFactory.decodeResource(getResources(),
                R.drawable.ic_launcher);
        mUpBitmap = Bitmap.createBitmap(mDownBitmap.getWidth(),
                mDownBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        mCanvas = new Canvas(mUpBitmap);
        mCanvas.drawColor(Color.GRAY);
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mPath.reset();//清除path设置的所有属性
                mPath.moveTo(event.getX(), event.getY());//将起始轮廓点移至x,y坐标点,默认情况为0,0点
                break;
            case MotionEvent.ACTION_MOVE:
                mPath.lineTo(event.getX(), event.getY()); //用于从当前轮廓点绘制一条线段到x,y点
                break;
        }
        mCanvas.drawPath(mPath, mPaint); //重新绘制Path
        invalidate(); //刷新
        return true;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //绘制图片
        canvas.drawBitmap(mDownBitmap, 0, 0, null);
        canvas.drawBitmap(mUpBitmap, 0, 0, null);
    }
}

OK,收工,喜欢就点个赞

相关文章

  • 自定义刮刮卡

    效果图 知识点(自定义TextView),重新方法 onTouchEvent onDraw 1.自定义变量 2.初...

  • Android自定义刮刮卡刮奖

    今天要分享的是Android上的刮刮卡控件。按照国际惯例,先上效果图。主要的功能: 自定义刮开后的文字、图片; 自...

  • 魔众刮刮卡抽奖系统 v2.0.0 支付抽奖,更好用的刮刮卡系统

    魔众刮刮卡抽奖系统是一个可快速私有化的刮刮卡系统,可以创建多个刮刮卡活动,奖品支持现金红包、积分、实物礼品、兑换码...

  • 刮刮卡

    今天下班时路过一家福彩店,我每次看到彩票店都挪不动步,因为我觉得自己在人世行为善良,老天总会想着法子奖励我,...

  • Android开发之自定义刮刮卡实现

    关于刮刮卡的实现效果不需要做太多解释,特别是在电商APP中,每当做活动的时候都会有它的身影存在,趁着美好周末,来实...

  • Android自定义View-刮刮卡效果

    首先来看一下效果图:(这是医生的书《Android群英传》中的一个知识点)我的 CSDN地址 绘制思路: 绘制两个...

  • OpenGL ES 实现刮刮卡和手写板功能

    该原创文章首发于微信公众号:字节流动 刮刮卡效果实现原理 其实利用 Android Canvas 实现类似刮刮卡或...

  • Canvas 刮刮卡

    利用canvas实现刮刮卡效果 步骤大概分为4点: 现在奖项上方绘制一个遮罩效果,可以用纯色或者图片 然后监听触碰...

  • iOS 刮刮卡

    先看下效果图 项目里需要做个刮刮卡功能,网上简单搜了一下,基本都是采用清除图层的方式来实现:如下所示: 如果粗略使...

  • php实现刮刮卡大转盘抽奖概率

    php实现刮刮卡大转盘抽奖概率 本文实例为大家分享了php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法,用法很简单...

网友评论

      本文标题:自定义刮刮卡

      本文链接:https://www.haomeiwen.com/subject/lzvlxxtx.html