Android学习笔记(四):android画图之paint之setXfermode
2019独角兽企业重金招聘Python工程师标准>>>
setXfermode
设置两张图片相交时的模式
我们知道 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。 如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;
而setXfermode就可以来解决这个问题
一般来说 用法是这样的
Canvas canvas = new Canvas(bitmap1);paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));canvas.drawBitmap(mask, 0f, 0f, paint);
就是在图片bitmap1上面绘制图片mask时 处理两者相交时候显示的问题
canvas原有的图片 可以理解为背景 就是dst
新画上去的图片 可以理解为前景 就是src
Mode的值 如下图
PorterDuff.Mode.CLEAR 清除画布上图像
PorterDuff.Mode.SRC 显示上层图像
PorterDuff.Mode.DST 显示下层图像
PorterDuff.Mode.SRC_OVER上下层图像都显示,上层居上显示
PorterDuff.Mode.DST_OVER 上下层都显示,下层居上显示
PorterDuff.Mode.SRC_IN 取两层图像交集部门,只显示上层图像
PorterDuff.Mode.DST_IN 取两层图像交集部门,只显示下层图像
PorterDuff.Mode.SRC_OUT 取上层图像非交集部门
PorterDuff.Mode.DST_OUT 取下层图像非交集部门
PorterDuff.Mode.SRC_ATOP 取下层图像非交集部门与上层图像交集部门
PorterDuff.Mode.DST_ATOP 取上层图像非交集部门与下层图像交集部门
PorterDuff.Mode.XOR 取两层图像的非交集部门
画图示例(画圆角矩形轨迹 常用语市面上流行的poker倒计时):
package com.k.gameview;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Region;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;public class GameView1 extends View implements Runnable {/* 声明Paint对象 */private Paint mPaint = null;public GameView1(Context context) {super(context);/* 构建对象 */mPaint = new Paint();/* 开启线程 */new Thread(this).start();}float arc;public void onDraw(Canvas canvas) {super.onDraw(canvas);if(arc>360)arc=0;/* 设置画布的颜色 */canvas.drawColor(Color.BLACK);/* 设置取消锯齿效果 */mPaint.setAntiAlias(true);mPaint.setAlpha(255);if(arc>200){mPaint.setColor(Color.YELLOW);}else{mPaint.setColor(Color.GREEN);}mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeWidth(5);RectF rf = new RectF(10, 10, 90, 140);canvas.drawRoundRect(rf, 10, 10, mPaint);mPaint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));mPaint.setAlpha(0);mPaint.setStyle(Paint.Style.FILL);canvas.drawArc(new RectF(-100, -75, 200, 225), 240, arc, true, mPaint);arc+=2.5;}// 触笔事件public boolean onTouchEvent(MotionEvent event) {return true;}// 按键按下事件public boolean onKeyDown(int keyCode, KeyEvent event) {return true;}// 按键弹起事件public boolean onKeyUp(int keyCode, KeyEvent event) {return false;}public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {return true;}public void run() {while (!Thread.currentThread().isInterrupted()) {try {Thread.sleep(100);} catch (InterruptedException e) {Thread.currentThread().interrupt();}// 使用postInvalidate可以直接在线程中更新界面
postInvalidate();}}
}
注注:部分内容来源网络
转载于:https://my.oschina.net/yolinfeng/blog/408091
Android学习笔记(四):android画图之paint之setXfermode相关推荐
- Android学习笔记:Android基础知识点(不断更新中)
1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...
- Android学习笔记(Android Studio)3-3(ProgressBar ProgressDialog)(加载进度条、转圈圈)UI组件之弹出组件
Android学习笔记3-3 推荐新手向学习视频:B站https://www.bilibili.com/video/av38409964点我传送 3-3 ProgressBar & Progr ...
- Android学习笔记四十Preference使用
Preference直译为偏好,博友建议翻译为首选项.一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择.Android提供preferenc ...
- Pro Android学习笔记 四八 ActionBar 1 Home图标区
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Acti ...
- Android 学习笔记四:创建工具栏按钮
原文:http://blog.csdn.net/lihongxun945/article/details/48951199 前面我们已经可以在一个Activity中添加一些按钮之类的组件.由于手机的屏 ...
- [Android学习笔记四] 自定义Android组件之组合方式创建密码框组件
Android中所有控件(也称组件)都继承自adnroid.view.View类,android.view.ViewGroup是View类的重要子类,绝大多书的布局类就继承自ViewGroup类. 参 ...
- Android学习笔记之Android Studio添加新的Activity
1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...
- Android学习笔记之android:collapseColumns,android:shrinkColumns和stretchColumn
TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但实际上,会经常在代码里使用TableLayout,例如做出表格的效果.本文主要介绍TableLayout的基本使用 ...
- Android学习笔记之 android:collapseColumns ,android:shrinkColumns 和stretchColumns
TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但实际上,会经常在代码里使用TableLayout,例如做出表格的效果.本文主要介绍TableLayout的基本使用 ...
最新文章
- 在树莓派中开发 opencv 大型程序
- 升级pip后出错:无法导入名称“ main”
- HTML基础标签入门
- ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程
- VisualStudio代码样式-我最喜欢的一种风格
- 揭秘TensorFlow:Google开源到底开的是什么?
- 关于Infobright的一个小TIPS
- php 数组区删除重复的,php – 从数组中删除重复的项目
- matlab中now函数_now()方法以及JavaScript中的示例
- Windows底层窗口的实现———学习笔记
- 利用OpenIPMI监控服务器温度
- 请自行检查是否安装VC9运行库??
- STM32中RTC唤醒停止模式
- 计算机基础知识表格斜线,怎么在excel中画斜线-制作好看的Excel表格必备技能:3秒制作斜线表头,简单到没朋友...
- 外媒分析:为何说苹果一定没造车!
- spring的工作原理介绍
- c语言中cap捕捉函数,CAP理论的理解
- Vortex: 一种基于RISC-V指令集自定义扩展的开源GPGPU架构
- 产品版本、软件版本、文档版本定义
- ESP01 连接OneNet平台
热门文章
- Java 里面 final 与 static
- fetchrow_array()与fetchrow_arrayref()与fetchrow_hashref()的使用方法
- 2019web前端全新面试题库 一
- PowerDesigner模型分类
- MySQL如何用一条SQL将一张表里的数据插入到另一张表
- union all查询统计总数量
- python基础===字符串的制表,换行基础操作
- Jenkins构建jmeter进行接口测试的一些配置
- 在SQL中用正则表达式替换html标签
- Powershell 查询SQL数据库资料