Android canvas画图操作之切割画布实现方法(clipRect)

本文实例讲述了Android canvas画图操作之切割画布实现方法。分享给大家供大家参考,具体如下:

android切割画布的历程不算很难,可是理解起来也比较麻烦,这里写一下我的理解 但是不一定正确:

canvas.clipRect(30, 30, 70, 70, Region.Op.XOR);

最后一个参数有多个选择分别是:

//DIFFERENCE是第一次不同于第二次的部分显示出来
//REPLACE是显示第二次的
//REVERSE_DIFFERENCE 是第二次不同于第一次的部分显示
//INTERSECT交集显示
//UNION全部显示
//XOR补集 就是全集的减去交集生育部分显示

import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Region; import android.util.AttributeSet; import android.view.View; public class sBook extends View{ Context mContext; Paint mPaint; Path mPath; public sBook(Context context) { super(context); init(); } public sBook(Context context, AttributeSet attrs) { super(context, attrs); init(); } public sBook(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init(){ mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStrokeWidth(6); mPaint.setTextSize(16); mPaint.setTextAlign(Paint.Align.RIGHT); mPath = new Path(); } 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.XOR); 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); mPath.cubicTo(0, 0, 100, 0, 100, 100); mPath.cubicTo(100, 100, 0, 100, 0, 0); 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(); } 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); } }

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

时间: 2024-10-18 19:23:47

Android canvas画图操作之切割画布实现方法(clipRect)的相关文章

Android canvas画图操作之切割画布实现方法(clipRect)_Android

本文实例讲述了Android canvas画图操作之切割画布实现方法.分享给大家供大家参考,具体如下: android切割画布的历程不算很难,可是理解起来也比较麻烦,这里写一下我的理解 但是不一定正确: canvas.clipRect(30, 30, 70, 70, Region.Op.XOR); 最后一个参数有多个选择分别是: //DIFFERENCE是第一次不同于第二次的部分显示出来 //REPLACE是显示第二次的 //REVERSE_DIFFERENCE 是第二次不同于第一次的部分显示

android 在 view 里我使用一个 自定义的 canvas 画图 出现问题

问题描述 android 在 view 里我使用一个 自定义的 canvas 画图 出现问题 在 view 里我使用一个 自定义 canvas 画图.先在 canvas 里画出背景, 再画出几个图片. 背景是一个张图片.当触发 onTouchEvent 后,图片移动 canvas 重画背景画出来会有图片移动的痕迹. 如果背景指定了一个颜色就不会有这样的问题. 怎么解决? canvas = new Canvas(bgbitmap); 绘制背景: canvas.drawColor(selectedC

《HTML5 canvas开发详解(第2版)》——2.11 清除画布的方法

2.11 清除画布的方法 读者已经在第1章中探索了如何刷新画布,第4章还会更深入地探讨.在本章结束之前,还要介绍一个可用于完全清除画布和刷新内容的例子. 2.11.1 简单填充使用一个新的背景色简单地填充整个画布,这样就可以清除当前内容,代码如下: context.fillStyle = '000000'; context.fillRect(0,0,theCanvas.width, theCanvas.height) 2.11.2 重置画布的宽和高当画布的宽或高被重置时,当前画布内容就会被移除,

JS实现简单的Canvas画图实例

这篇文章介绍了JS实现简单的Canvas画图实例代码,有需要的朋友可以参考一下   定义变量:[javascript] 复制代码 代码如下: var startX; var startY; var endX; var endY; var radius; var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d"); var select = docume

win7系统自带的画图工具怎么调节画布大小?

  win7系统自带的画图工具怎么调节画布大小?           1.如图,打开win7系统画图软件后,感觉画布较小. 2.如果想快速更改画布大小,可以将鼠标指针指向画布边角或底部.侧面处的小正方形处. 3.指向画布边角处的小正方形处后,鼠标指针会改变形状.如图:指向边角处变成图中所示形状. 4.指向底部变成图中所示形状. 5.指向侧面变成图中所示形状. 6.鼠标指针改变形状后,按住鼠标左键不放同时拖动鼠标,即可更改画布大小.

android操作XML的几种方法总结_Android

XML作为一种业界公认的数据交换格式,在各个平台与语言之上,都有广泛使用和实现.其标准型,可靠性,安全性......毋庸置疑.在android平台上,我们要想实现数据存储和数据交换,经常会使用到xml数据格式和xml文件. 小提示:android中存储数据一般有如下几种:SharedPreferences(参数化),XML文件,sqllite数据库,网络,ContentProvider(内容提供者)等. 在android中,操作xml文件,一般有几种方式:SAX操作,Pull操作,DOM操作等.

Android ADB 怎么操作手机剪贴板,如何读取和写入剪贴板内容?

问题描述 Android ADB 怎么操作手机剪贴板,如何读取和写入剪贴板内容? 网上搜索到这个命令:shell service call clipboard 1 但没有正确返回内容,总是提示:i Attempt to invoke virtual method int android content ClipData getItemCount() on a null object reference 执行shell service call clipboard 2 返回Unknown pack

界面-请教一下,android视频播放器操作菜单的实现思路

问题描述 请教一下,android视频播放器操作菜单的实现思路 在做一个简单的android视频播放器练手,使用的MediaPlayer+SurfaceView.现在实现了播放,在着手于播放时的操作界面. 实现目标就是很常见的那种,点击一下视频,就会浮现在正在播放的视频上面,两秒木有操作自动隐藏. 我能想到的就是放在fragment里,然后监听SurfaceView的点击情况,来控制fragment的显示和隐藏. 请教各位指点我这个思路有没有缺陷,或者有没有其他更好的思路.谢谢 解决方案 网上有

android的文件操作

android的文件操作要有权限: view plaincopy to clipboardprint? <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"&