效果图

核心代码

 @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实现聚光灯效果相关推荐

  1. Android 自定义 圆环,Android自定义view实现圆环效果实例代码

    先上效果图,如果大家感觉不错,请参考实现代码. 重要的是如何实现自定义的view效果 (1)创建类,继承view,重写onDraw和onMesure方法 public class CirclePerc ...

  2. android中仿qq最新版抽屉,Android 自定义View实现抽屉效果

    Android 自定义View实现抽屉效果 说明 这个自定义View,没有处理好多点触摸问题 View跟着手指移动,没有采用传统的scrollBy方法,而是通过不停地重新布局子View的方式,来使得子 ...

  3. android波纹效果弹窗,Android自定义View实现波纹效果

    Android自定义View实现波纹效果 时间:2017-05-27     来源:移动互联网学院 1.引言:随着Android智能手机的普及,Android应用得到了大力支持,而Android应用的 ...

  4. android 循环弹幕,Android自定义View实现弹幕效果

    原标题:Android自定义View实现弹幕效果 在很多视频直播中都有弹幕功能,而安卓上没有简单好用的弹幕控件,本文介绍一个自定义弹幕view的demo. 效果图: 思路: 自定义Textitem类表 ...

  5. android功能相同的view,Android自定义View实现扫描效果

    本文实例为大家分享了Android自定义View实现扫描效果的具体代码,供大家参考,具体内容如下 演示效果如下: 实现内容: 1.控制动画是竖向或者横向 2.控制动画初始是从底部/左边开始,或者从上边 ...

  6. android下雨动画效果,Android 自定义View(二) 下雨效果

    Rain.gif Android 自定义View(二) 下雨效果 一 实现思路, 雨点用线段表示,通过控制线段的大小和宽度来表示不同的线段. 一个雨点下雨的过程可以表示为一条直线,一次雨点在下雨的过程 ...

  7. android自定义view实现公章效果

    上次去一个公司面试,面试官问了一个题,怎么用android的自定义view实现一个公章的效果,据说这是华为之前的面试题,我想了下,要是公章的效果,最外层是一个圆,里面是一个五角星,但是这文字怎么画呢, ...

  8. Android自定义sleep图,android自定义view实现钟表效果

    本文实例为大家分享了android view实现钟表的具体代码,供大家参考,具体内容如下 先看效果图: 自定义view大家肯定已经不陌生了,所以直接今天直接步入正题:如何利用canvas去绘制出一个钟 ...

  9. ios swift 纯代码自定义view(控件) XYswitchView

    文章目录 1.截图 2.代码 2.1 XYswitchView.swift 2.2 LoginVC.swift 3.参考博客 1.截图 2.代码 2.1 XYswitchView.swift impo ...

最新文章

  1. PowerShell攻防进阶篇:nishang工具用法详解
  2. Python可变序列中的一些坑
  3. 随笔分类 - java高级特性
  4. oracle dba 手动创建数据实例
  5. Python List:合并多个list,listd的合并
  6. dispatch js实现_通信:派发与广播,on与emit,自行实现dispatch和broadcast方法
  7. 解决安装phpstudy之后启动Apache失败的问题
  8. 【乐理知识】第二章 音符 休止符
  9. java outofmerroy_Tomcat中的Out Of Memory错误
  10. 三星 android recovery,三星所有机型如何进入recovery模式的方法
  11. 2020年国赛A题目思路(高教杯全国大学生数学建模竞赛)
  12. 32怎么通过一个按键实现不同工作模式_游戏工作室防封IP,免费领!!!魔兽世界怀旧版独享IP免费送...
  13. 2022年最火副业;海外抖音 (TikTok) 搬运视频,一周赚一个月工资。
  14. 全网最硬核 JVM TLAB 分析(单篇版不包含额外加菜)
  15. 如果编写 if 时不带 else
  16. python画图marker显示_python matplotlib 画图刻度、图例等字体、字体大小、刻度密度、线条样式设置...
  17. 工信部:全国规划在建大型以上数据中心平均设计PUE降到1.3以下​
  18. 中专计算机应用基础课课程标准,计算机应用基础课程标准
  19. BZOJ 1814 Ural 1519 Formula 1
  20. 台式机和工作站到底有什么区别?

热门文章

  1. Hibernate的下载和安装
  2. 贵州大学计算机试题及答案,贵州大学学位计算机选择题答案
  3. Android开发快速入门及导出apk
  4. docker删除无用容器、镜像
  5. 高斯牛顿法去畸变(C++实现)
  6. LEDE嵌入式无线路由系统定制
  7. 偏度与峰度(附python代码)
  8. Win32病毒入门 -- ring3篇
  9. 什么是最好的在线UML软件工具?
  10. 论 *.pdm 文件的正确打开方式