高级UI汇总​​​​​​​
eniorUI05_Paint_Xfermode模式
##1 Effect Picture

##2 Demo
SeniorUI05_GuaGuaCardActivity
##3 Requirement
刮刮卡效果:显示一张图片,手势触摸滑动露出图片后面覆盖的内容
##4 Theory

  • 自定义View,同一位置画两张图片,上层位置手指划过路径实现透明,从而实现“刮”的效果
  • 利用xfermode合成上层图片
  • 上层图片为src,创建一个与src等宽高无内容透明图片dst
  • 手指触摸的路径画到dst上
  • 利用xfermode的SRC_OUT将src和dst合成,结果是src中去掉dst的图片内容,最终生成我们想要的刮刮卡效果

##5 Core Code

public class GuaGuaCardView_SRCOUT extends View {private Paint mBitPaint;private Bitmap BmpDST,BmpSRC,BmpText;private Path mPath;private float mPreX,mPreY;public GuaGuaCardView_SRCOUT(Context context, AttributeSet attrs) {super(context, attrs);setLayerType(View.LAYER_TYPE_SOFTWARE, null);mBitPaint = new Paint();mBitPaint.setColor(Color.RED);mBitPaint.setStyle(Paint.Style.STROKE);mBitPaint.setStrokeWidth(45);BmpText = BitmapFactory.decodeResource(getResources(),R.drawable.guaguaka_text1,null);BmpSRC = BitmapFactory.decodeResource(getResources(), R.drawable.guaguaka,null);BmpDST = Bitmap.createBitmap(BmpSRC.getWidth(), BmpSRC.getHeight(), Bitmap.Config.ARGB_8888);mPath = new Path();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawBitmap(BmpText,0,0,mBitPaint);int layerId = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);//先把手指轨迹画到目标Bitmap上Canvas c = new Canvas(BmpDST);c.drawPath(mPath,mBitPaint);//然后把目标图像画到画布上canvas.drawBitmap(BmpDST,0,0,mBitPaint);//计算源图像区域mBitPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));canvas.drawBitmap(BmpSRC,0,0,mBitPaint);mBitPaint.setXfermode(null);canvas.restoreToCount(layerId);}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()){case MotionEvent.ACTION_DOWN:mPath.moveTo(event.getX(),event.getY());mPreX = event.getX();mPreY = event.getY();return true;case MotionEvent.ACTION_MOVE:float endX = (mPreX+event.getX())/2;float endY = (mPreY+event.getY())/2;mPath.quadTo(mPreX,mPreY,endX,endY);mPreX = event.getX();mPreY =event.getY();break;case MotionEvent.ACTION_UP:break;}postInvalidate();return super.onTouchEvent(event);}
}

SeniorUI0503_Xfermode刮刮卡(橡皮檫)效果相关推荐

  1. android实现一个橡皮檫效果的自定义View,实现刮奖效果

    最近学习自定义View然后做了这么个东西,感觉挺有趣. 简单的就不写了就是一个Activity然后在其中使用,就像TextView一样,只需要设置宽高就行了wrap_content和match_par ...

  2. 实现canvas圆形橡皮檫像素清空功能

    由于项目里面需求一个圆形的橡皮檫功能,但是原生的canvas清空方法只有一个clearRect() 方法,这个方法只是可以提供矩形清空的方法. 根据项目需求,我们只能想办法实现,最后,通过百度想到的办 ...

  3. 用BlendFunc实现舞台灯光和刮刮卡效果

    [转]http://code.lovemiao.com/?p=136#more-136 之前写过一篇<不规则形状按钮的点击判定>,利用了CCRenderTexture创建一块画布,可以在上 ...

  4. 刮刮乐html5效果擦除,利用HTML5的画布Canvas实现刮刮卡效果

    先给大家展示效果: 你玩过刮刮卡么?一不小心可以中奖的那种.今天我给大家分享一个基于HTML5技术实现的刮刮卡效果,在PC上只需按住鼠标,在手机上你只需按住指头,轻轻刮去图层就可以模拟真实的刮奖效果. ...

  5. 用python+pygame模块实现一波刮刮卡效果,图像处理之路(附源码)

    前言 利用python模拟了刮开刮刮卡效果,让我们愉快地开始吧~ 效果展示 开发工具 Python版本: 3.6.4 相关模块: pygame模块: 以及一些python自带的模块. 环境搭建 安装P ...

  6. html制作花样链接卡页面_使用HTML5实现刮刮卡效果

    我们利用HTML5的画布Canvas,结合其提供的API,在Canvas元素上绘制一个灰色蒙层,然后通过检测用户鼠标移到和手势来绘制一个透明的图形,这样就能看到Canvas背景下的真实图片,就达到刮刮 ...

  7. [html] 写一个类似刮刮卡效果的交互,即鼠标划过时显示号码

    [html] 写一个类似刮刮卡效果的交互,即鼠标划过时显示号码 <title>Document</title> <style> *{ margin:0; paddi ...

  8. 刮刮乐html5效果擦除,HTML5实现刮刮卡的效果

    HTML5实现类似刮刮卡的功能 上面是最终实现刮刮卡效果 注意要点设置: 1.设置用户缩放:user-scalable=no|yes [java] view plaincopyprint? 2.禁止拖 ...

  9. creator 学习之mask(刮刮卡效果)

    1.效果 2.原理 creator的刮刮卡是由mask的反向遮罩实现的,这是因为遮罩的内部功能是由画笔(graphics)实现的.利用遮罩的画笔功能将需要涂抹的地方进行修改达到刮刮卡的效果,至于百分比 ...

最新文章

  1. php 返回一个json对象,PHP给前端返回一个JSON对象的实例讲解
  2. 【转载】目前为止看到描述VSCode编写C++配置文件最清楚的一篇文章
  3. php if 定义变量,无法在PHP中的if块中设置变量的值
  4. 海洋大数据关键技术及在灾害天气下船舶行为预测上的应用
  5. 20、自动装配-@Autowired@Qualifier@Primary
  6. tp3.2 视图中常用使用
  7. linux安装jdk详细步骤,需要有一定的语法基础
  8. 《Java核心技术 卷1 基础知识 原书第10版》
  9. 家庭常用5号/7号电池购买及使用攻略
  10. uniapp仿淘宝--商品详情模板
  11. Python学习报告
  12. 光滑噪声数据常用的方法_几种常见的数据变换方法
  13. SQL | DB2和MySQL分条件求和
  14. 解决WARNING: Ignoring invalid distribution -pencv-python (c:\users\lhw\anaconda3\lib\site-packages)
  15. js判断字符串字符数(汉字算两个)
  16. mac 打开Readme.md文件 -- 无需下载软件
  17. GD32汽车诊断KWP 协议/ ISO-14230测试
  18. effective morden c++4
  19. 《魔界地牢:异世界战纪》隐私政策
  20. 小蒋家庭影音平台 怎么用

热门文章

  1. Mac环境下brew安装、SVN安装
  2. 第六章-ROS机器人系统仿真
  3. 【Pytorch深度学习实践】B站up刘二大人之BasicCNN Advanced CNN -代码理解与实现(9/9)
  4. python学习(第二节课)
  5. 扬帆起航,再踏征程(三)
  6. 阿里云视频vod.cn-beijing.aliyuncs.com (Domain name not found)
  7. minimal-mock 极简 mock 服务
  8. 带有缓冲区的流 Buffer
  9. awvs13无法登陆,白屏
  10. 收藏几款好用的mysql的客户端工具