Android Clipping
转自:https://blog.csdn.net/gaomatrix/article/details/6532144
[java] view plain copy
public class Clipping extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new SampleView(this)); } private static class SampleView extends View { private Paint mPaint; private Path mPath; public SampleView(Context context) { super(context); setFocusable(true); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStrokeWidth(6); mPaint.setTextSize(16); mPaint.setTextAlign(Paint.Align.RIGHT); mPath = new Path(); } private void drawScene(Canvas canvas) { canvas.clipRect(0, 0, 100, 100); canvas.drawColor(Color.WHITE); mPaint.setColor(Color.RED); canvas.drawLine(0, 0, 100, 100, mPaint); mPaint.setColor(Color.GREEN); canvas.drawCircle(30, 70, 30, mPaint); mPaint.setColor(Color.BLUE); canvas.drawText("Clipping", 100, 30, mPaint); } @Override protected void onDraw(Canvas canvas) { canvas.drawColor(Color.GRAY); canvas.save(); canvas.translate(10, 10); drawScene(canvas); canvas.restore(); canvas.save(); canvas.translate(160, 10); canvas.clipRect(10, 10, 90, 90); canvas.clipRect(30, 30, 70, 70, Region.Op.DIFFERENCE); drawScene(canvas); canvas.restore(); canvas.save(); canvas.translate(10, 160); mPath.reset(); canvas.clipPath(mPath); // makes the clip empty mPath.addCircle(50, 50, 50, Path.Direction.CCW); canvas.clipPath(mPath, Region.Op.REPLACE); drawScene(canvas); canvas.restore(); canvas.save(); canvas.translate(160, 160); canvas.clipRect(0, 0, 60, 60); canvas.clipRect(40, 40, 100, 100, Region.Op.UNION); drawScene(canvas); canvas.restore(); canvas.save(); canvas.translate(10, 310); canvas.clipRect(0, 0, 60, 60); canvas.clipRect(40, 40, 100, 100, Region.Op.XOR); drawScene(canvas); canvas.restore(); canvas.save(); canvas.translate(160, 310); canvas.clipRect(0, 0, 60, 60); canvas.clipRect(40, 40, 100, 100, Region.Op.REVERSE_DIFFERENCE); drawScene(canvas); canvas.restore(); } }
}
//DIFFERENCE是第一次不同于第二次的部分显示出来
//REPLACE是显示第二次的
//REVERSE_DIFFERENCE 是第二次不同于第一次的部分显示
//INTERSECT交集显示
//UNION全部显示
//XOR补集 就是全集的减去交集生育部分显示
canvas.translate(float dx, float dy)方法的解释:
和j2me的translate用法一样,作用就是移动原点,默认的原点(0,0)是在屏幕左上角的,你可以通过translate(x,y)把点(x,y)作为原点
Canvas提供了ClipPath, ClipRect, ClipRegion 等方法来裁剪,通过Path, Rect ,Region 的不同组合,Android几乎可以支持任意现状的裁剪区域。
android.graphics包中定义了Point, Rect, Path, Region 这几种几何形状,Path可以为有圆弧,椭圆,二次曲线,三次曲线,线段,矩形等基本几何图形或是由这些基本几何图形组合而成,Path可以为开放或是闭合曲线。Rect提供了定义矩形的简洁方法。Region则支持通过区域的“加”,“减”,“并”,“异或”等逻辑运算由多个Region组合而成。Region.Op定义了Region支持的区域间运算种类。
Clipping 介绍有Region运算来为Canvs定义剪裁区域后,同一幅图最后显示的效果。canvas.save();和canvas.restore();用于保存和恢复Canvas的状态属性。
Android Clipping相关推荐
- Android clippling使用
Android clipping Clipping 在Android中如果多个view嵌套的会引起overdraw,很多时候一些view被覆盖了,对用户是不可见的,但是依然会进行绘制,这个时候使用cl ...
- Android 5.X 新特性详解(一)MD主题、Palette、视图阴影、Tinting(着色)和Clipping(裁剪)
Android 5.X系列使用新的MaterialDesign设计风格,这次的MaterialDesign设计将Android带到了一个全新的高度. Material Design 主题 Materi ...
- Android 路径(Path)与剪裁(Clipping)详解
转自:http://blog.csdn.net/bigdavidwli007/article/details/8930640 在定义各种形状的view的需求驱使下 ,在网上找到这片文章,貌似看的人很少 ...
- ym—— Android 5.0学习之Tinting和Clipping
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 前言 Android 5.0的知识点讲完,下一篇要给大家带来一个综合例子的Demo,以 ...
- Android开源项目分类汇总-转载
太长了,还是转载吧... 今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有 ...
- Android开源项目分类汇总[转]
Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 Star 和 Fork Android优秀开源项目实现原理解析 欢迎加入 QQ 交流群:383537512(入群理由需要填写 ...
- freeglut中提供的几种立体几何对象绘制的android移植
在freeglut_geometry.c中定义了几种常见图形的绘制,包括立方体, 球面, 圆锥体, 圆柱体, 圆环面, 十二面体, 八面体, 四面体, 二十面体, 菱形十二面体(斜十二面体)等几种立体 ...
- 【Android应用开发】RecycleView API 翻译 (文档翻译)
. RecyclerView extends ViewGroup implements ScrollingView NestedScrollingChild java.lang.Object ↳ ...
- Android实现炫酷SVG动画效果
svg是眼下十分流行的图像文件格式了,svg严格来说应该是一种开放标准的矢量图形语言,使用svg格式我们能够直接用代码来描画图像,能够用不论什么文字处理工具打开svg图像.通过改变部分代码来使图像具有 ...
最新文章
- 户外lisp导向牌如何安装_有了激光切割导向牌,妈妈再也不用担心我迷路啦
- 【整理】SAP PM工厂维护模块初识
- 请验证实例名称是否正确并且 sql server 已配置为允许远程连接_安装MySQL后,需要调整的10个性能配置项...
- SDUT 3377 数据结构实验之查找五:平方之哈希表
- 程序员面试金典 - 面试题 17.07. 婴儿名字(并查集)
- 【工具】Notepad++的一些常用配置
- alphazawgyiversion3 安装口令_车窗晴雨挡到底有着什么用?为什么那么多人安装?酷斯特玩车...
- linux 平行运行命令,Linux paste命令
- 19.Java 数据库编程
- IntelliJ IDEA 2017.2永久破解
- 卷积码树状图怎么画_卷积码状态图怎么画 卷积编码器状态图画法
- React Native导航器之react-navigation使用
- 技校计算机可以学平面设计吗,上技校可以学平面设计吗 去技校学平面设计还是自己在家自学好 - 兔课网...
- 聊聊旷厂黑科技 | 五彩斑斓的黑,旷视“算”出来了!
- Tslib移植与分析
- 《MLB棒球创造营》:走近棒球运动·圣路易斯红雀队
- 微信开放平台-第三方平台开发配置及常见的问题
- mac搜不到Android模拟器,听不到声音Android模拟器Mac
- UTC和本地时间互相转换
- 移动端点击input不触发光标(原生js)
热门文章
- 顺时针(逆时针)填充矩阵
- 关于SAP 启用新公司时 选用的会计准则
- SQL实现一对多、多对多建表与查询
- python 空间法向量可视化_利用空间法向量求二面角具体方法
- 小白鼠喝毒水问题(一分为二的思想)
- leetcode_345 Reverse Vowels of a String
- 阿里云服务器支持IPV6和CND的详细教程
- 计算机主机安全属性包括,计算机安全属性包括哪些
- 计算机资源管理器不显示桌面图标,Win7 64位系统启动后,如何解决桌面不显示图标和任务栏的问题...
- rk3288 RTC实现定时开关机