Android刮刮卡效果实现代码

作者:木叶57 时间:2023-08-24 01:29:58 

本文实例为大家分享了Android刮刮卡效果,供大家参考,具体内容如下

android实现底层一张图片,上层一个遮罩层,触摸滑动按手指滑动路径实现去除遮罩效果,类似于抽奖的刮刮卡一样,不多说先上张效果图:

Android刮刮卡效果实现代码

直接上代码:

XfermodeView.java 


/**
* Created by 57 on 2016-4-21.
*/
public class XfermodeView extends View{
private Bitmap mBgBitmap,mFgBitmap;
private Paint mPaint;
private Canvas mCanvas;
private Path mPath;

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

public XfermodeView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public XfermodeView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}

@Override
protected void onDraw(Canvas canvas) {

canvas.drawBitmap(mBgBitmap,0,0,null);
canvas.drawBitmap(mFgBitmap,0,0,null);
}

private void init() {
mPaint = new Paint();
mPaint.setAlpha(0);
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();
mBgBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test5);
mFgBitmap = Bitmap.createBitmap(mBgBitmap.getWidth(),mBgBitmap.getHeight(),Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mFgBitmap);
mCanvas.drawColor(Color.GRAY);

}

@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()){
 case MotionEvent.ACTION_DOWN:
 mPath.reset();
 mPath.moveTo(event.getX(),event.getY());
 break;
 case MotionEvent.ACTION_MOVE:
 mPath.lineTo(event.getX(),event.getY());
 break;
}
mCanvas.drawPath(mPath,mPaint);
invalidate();
return true;
}
}

Xfermode有三个子类 :
AvoidXfermode  指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。
PixelXorXfermode  当覆盖已有的颜色时,应用一个简单的像素异或操作。
PorterDuffXfermode  这是一个非常强大的转换模式,使用它,可以使用图像合成的16条Porter-Duff规则的任意一条来控制Paint

如何与已有的Canvas图像进行交互。

从上面我们可以看到PorterDuff.Mode为枚举类,一共有16个枚举值:
1.PorterDuff.Mode.CLEAR 
  所绘制不会提交到画布上。
2.PorterDuff.Mode.SRC
   显示上层绘制图片
3.PorterDuff.Mode.DST
  显示下层绘制图片
4.PorterDuff.Mode.SRC_OVER
  正常绘制显示,上下层绘制叠盖。
5.PorterDuff.Mode.DST_OVER
  上下层都显示。下层居上显示。
6.PorterDuff.Mode.SRC_IN
   取两层绘制交集。显示上层。
7.PorterDuff.Mode.DST_IN
  取两层绘制交集。显示下层。
8.PorterDuff.Mode.SRC_OUT
 取上层绘制非交集部分。
9.PorterDuff.Mode.DST_OUT
 取下层绘制非交集部分。
10.PorterDuff.Mode.SRC_ATOP
 取下层非交集部分与上层交集部分
11.PorterDuff.Mode.DST_ATOP
 取上层非交集部分与下层交集部分
12.PorterDuff.Mode.XOR
  异或:去除两图层交集部分
13.PorterDuff.Mode.DARKEN
  取两图层全部区域,交集部分颜色加深
14.PorterDuff.Mode.LIGHTEN
  取两图层全部,点亮交集部分颜色
15.PorterDuff.Mode.MULTIPLY
  取两图层交集部分叠加后颜色
16.PorterDuff.Mode.SCREEN
  取两图层全部区域,交集部分变为透明色

Android刮刮卡效果实现代码

标签:Android,刮刮卡
0
投稿

猜你喜欢

  • java多线程Thread-per-Message模式详解

    2022-12-23 16:55:00
  • 详解SpringBoot注入数据的方式

    2022-05-09 06:34:24
  • Spring如何在一个事务中开启另一个事务

    2021-08-30 17:29:15
  • 优化SimpleAdapter适配器加载效率的方法

    2022-03-10 20:33:32
  • Android仿百度图片查看功能

    2023-09-26 07:50:24
  • 简单讲解java中throws与throw的区别

    2022-06-01 05:16:55
  • SpringBoot 配置文件加密的步骤

    2023-10-23 02:55:55
  • Android实现状态栏和虚拟按键背景颜色的变化实例代码详解

    2023-02-07 00:17:15
  • Java实现简单台球游戏

    2022-06-28 23:55:59
  • C# 注册表 操作实现代码

    2023-07-02 21:53:22
  • Android使用PowerImageView实现播放强大的ImageView动画效果

    2022-06-16 19:55:54
  • Spring Boot 启动加载数据 CommandLineRunner的使用

    2021-06-17 12:52:21
  • Java实现几种常见排序算法代码

    2022-10-10 20:42:19
  • C#实现截图工具小项目

    2023-10-02 08:20:03
  • C#日期格式化的几个要点小结

    2023-12-19 08:56:05
  • 从Request.Url中获取根网址的简单操作

    2022-04-18 04:44:40
  • 基于swing实现窗体拖拽和拉伸

    2023-11-12 22:32:40
  • Android仿正点闹钟时间齿轮滑动效果

    2022-09-06 09:27:46
  • C++中cin的返回值问题

    2021-07-04 17:59:22
  • 详解SpringBoot+SpringSecurity+jwt整合及初体验

    2023-11-28 23:54:48
  • asp之家 软件编程 m.aspxhome.com