几行代码自定义view实现聚光灯效果
效果图
核心代码
@Overrideprotected void onDraw(Canvas canvas) {Bitmap bitmapPic=BitmapFactory.decodeResource(MyApplication.getInstance().getResources(),R.mipmap.gir);Bitmap bitmap1= Bitmap.createBitmap(bitmapPic.getWidth(), bitmapPic.getHeight(), Bitmap.Config.ARGB_8888);canvas.drawBitmap(bitmapPic,0,0,null);canvas1=new Canvas(bitmap1);canvas1.drawColor(0xaaFF00FF);**paingBitmap.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));**canvas1.drawCircle(bitmapPic.getWidth()/4+80,bitmapPic.getWidth()/4,bitmapPic.getWidth()/4,paingBitmap);canvas.drawBitmap(bitmap1,0,0,null);bitmapPic.recycle();bitmap1.recycle();}
关键点:paingBitmap.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
PorterDuff有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 取两图层全部区域,交集部分变为透明色
注意:不要在onDraw里面创建Paint,容易造成频繁的GC
源码
public class lightPicView extends View {private Paint paingBitmap;private Canvas canvas1;public lightPicView(Context context) {super(context);}public void initData(){paingBitmap=new Paint();paingBitmap.setAntiAlias(true);}public lightPicView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);initData();}public lightPicView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}@Overrideprotected void onLayout(boolean changed, int left, int top, int right, int bottom) {super.onLayout(changed, left, top, right, bottom);}@Overrideprotected void onDraw(Canvas canvas) {Bitmap bitmapPic=BitmapFactory.decodeResource(MyApplication.getInstance().getResources(),R.mipmap.gir);Bitmap bitmap1= Bitmap.createBitmap(bitmapPic.getWidth(), bitmapPic.getHeight(), Bitmap.Config.ARGB_8888);canvas.drawBitmap(bitmapPic,0,0,null);canvas1=new Canvas(bitmap1);canvas1.drawColor(0xaaFF00FF);paingBitmap.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));canvas1.drawCircle(bitmapPic.getWidth()/4+80,bitmapPic.getWidth()/4,bitmapPic.getWidth()/4,paingBitmap);canvas.drawBitmap(bitmap1,0,0,null);}
}
几行代码自定义view实现聚光灯效果相关推荐
- Android 自定义 圆环,Android自定义view实现圆环效果实例代码
先上效果图,如果大家感觉不错,请参考实现代码. 重要的是如何实现自定义的view效果 (1)创建类,继承view,重写onDraw和onMesure方法 public class CirclePerc ...
- android中仿qq最新版抽屉,Android 自定义View实现抽屉效果
Android 自定义View实现抽屉效果 说明 这个自定义View,没有处理好多点触摸问题 View跟着手指移动,没有采用传统的scrollBy方法,而是通过不停地重新布局子View的方式,来使得子 ...
- android波纹效果弹窗,Android自定义View实现波纹效果
Android自定义View实现波纹效果 时间:2017-05-27 来源:移动互联网学院 1.引言:随着Android智能手机的普及,Android应用得到了大力支持,而Android应用的 ...
- android 循环弹幕,Android自定义View实现弹幕效果
原标题:Android自定义View实现弹幕效果 在很多视频直播中都有弹幕功能,而安卓上没有简单好用的弹幕控件,本文介绍一个自定义弹幕view的demo. 效果图: 思路: 自定义Textitem类表 ...
- android功能相同的view,Android自定义View实现扫描效果
本文实例为大家分享了Android自定义View实现扫描效果的具体代码,供大家参考,具体内容如下 演示效果如下: 实现内容: 1.控制动画是竖向或者横向 2.控制动画初始是从底部/左边开始,或者从上边 ...
- android下雨动画效果,Android 自定义View(二) 下雨效果
Rain.gif Android 自定义View(二) 下雨效果 一 实现思路, 雨点用线段表示,通过控制线段的大小和宽度来表示不同的线段. 一个雨点下雨的过程可以表示为一条直线,一次雨点在下雨的过程 ...
- android自定义view实现公章效果
上次去一个公司面试,面试官问了一个题,怎么用android的自定义view实现一个公章的效果,据说这是华为之前的面试题,我想了下,要是公章的效果,最外层是一个圆,里面是一个五角星,但是这文字怎么画呢, ...
- Android自定义sleep图,android自定义view实现钟表效果
本文实例为大家分享了android view实现钟表的具体代码,供大家参考,具体内容如下 先看效果图: 自定义view大家肯定已经不陌生了,所以直接今天直接步入正题:如何利用canvas去绘制出一个钟 ...
- ios swift 纯代码自定义view(控件) XYswitchView
文章目录 1.截图 2.代码 2.1 XYswitchView.swift 2.2 LoginVC.swift 3.参考博客 1.截图 2.代码 2.1 XYswitchView.swift impo ...
最新文章
- PowerShell攻防进阶篇:nishang工具用法详解
- Python可变序列中的一些坑
- 随笔分类 - java高级特性
- oracle dba 手动创建数据实例
- Python List:合并多个list,listd的合并
- dispatch js实现_通信:派发与广播,on与emit,自行实现dispatch和broadcast方法
- 解决安装phpstudy之后启动Apache失败的问题
- 【乐理知识】第二章 音符 休止符
- java outofmerroy_Tomcat中的Out Of Memory错误
- 三星 android recovery,三星所有机型如何进入recovery模式的方法
- 2020年国赛A题目思路(高教杯全国大学生数学建模竞赛)
- 32怎么通过一个按键实现不同工作模式_游戏工作室防封IP,免费领!!!魔兽世界怀旧版独享IP免费送...
- 2022年最火副业;海外抖音 (TikTok) 搬运视频,一周赚一个月工资。
- 全网最硬核 JVM TLAB 分析(单篇版不包含额外加菜)
- 如果编写 if 时不带 else
- python画图marker显示_python matplotlib 画图刻度、图例等字体、字体大小、刻度密度、线条样式设置...
- 工信部:全国规划在建大型以上数据中心平均设计PUE降到1.3以下​
- 中专计算机应用基础课课程标准,计算机应用基础课程标准
- BZOJ 1814 Ural 1519 Formula 1
- 台式机和工作站到底有什么区别?