`
1025250620
  • 浏览: 225961 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android clipPath切割画布

 
阅读更多

(转自:http://wallage.blog.163.com/blog/static/1738962420101012439991/)

 

 

 

  1. public class PictureTestActivity extends Activity {  
  2.    
  3.        @Override  
  4.        public void onCreate(Bundle savedInstanceState){  
  5.            super.onCreate(savedInstanceState);  
  6.            setContentView(new SampleView(this));  
  7.        }  
  8.         private static class SampleView extends View {  
  9.             private Paint mPaint;  
  10.             private Path mPath;  
  11.             public SampleView(Context context) {  
  12.                 super(context);  
  13.                 setFocusable(true);  
  14.                   
  15.                 mPaint = new Paint();  
  16.                 mPaint.setAntiAlias(true);  
  17.                 mPaint.setStrokeWidth(6);  
  18.                 mPaint.setTextSize(16);  
  19.                 mPaint.setTextAlign(Paint.Align.RIGHT);  
  20.                   
  21.                 mPath = new Path();  
  22.             }  
  23.               
  24.             private void drawScene(Canvas canvas) {  
  25.                 canvas.clipRect(00100100);  
  26.                   
  27.                 canvas.drawColor(Color.WHITE);  
  28.                   
  29.                 mPaint.setColor(Color.RED);  
  30.                 canvas.drawLine(00100100, mPaint);  
  31.                   
  32.                 mPaint.setColor(Color.GREEN);  
  33.                 canvas.drawCircle(307030, mPaint);  
  34.                   
  35.                 mPaint.setColor(Color.BLUE);  
  36.                 canvas.drawText("Clipping"10030, mPaint);  
  37.             }  
  38.               
  39.             @Override   
  40.             protected void onDraw(Canvas canvas) {  
  41.                 canvas.drawColor(Color.GRAY);              
  42.                 canvas.save();  
  43.                 canvas.translate(1010);  
  44.                 drawScene(canvas);  
  45.                 canvas.restore();  
  46.                   
  47.                 canvas.save();  
  48.                 canvas.translate(16010);  
  49.                 canvas.clipRect(10109090);  
  50.                 canvas.clipRect(30307070, Region.Op.DIFFERENCE);  
  51.                 drawScene(canvas);  
  52.                 canvas.restore();  
  53.                   
  54.                 canvas.save();  
  55.                 canvas.translate(10160);  
  56.                 mPath.reset();  
  57.                 canvas.clipPath(mPath); // makes the clip empty  
  58.                 mPath.addCircle(505050, Path.Direction.CCW);  
  59.                 canvas.clipPath(mPath, Region.Op.REPLACE);  
  60.                 drawScene(canvas);  
  61.                 canvas.restore();  
  62.                   
  63.                 canvas.save();  
  64.                 canvas.translate(160160);  
  65.                 canvas.clipRect(006060);  
  66.                 canvas.clipRect(4040100100, Region.Op.UNION);  
  67.                 drawScene(canvas);  
  68.                 canvas.restore();  
  69.                   
  70.                 canvas.save();  
  71.                 canvas.translate(10310);  
  72.                 canvas.clipRect(006060);  
  73.                 canvas.clipRect(4040100100, Region.Op.XOR);  
  74.                 drawScene(canvas);  
  75.                 canvas.restore();  
  76.                   
  77.                 canvas.save();  
  78.                 canvas.translate(160310);  
  79.                 canvas.clipRect(006060);  
  80.                 canvas.clipRect(4040100100, Region.Op.REVERSE_DIFFERENCE);  
  81.                 drawScene(canvas);  
  82.                 canvas.restore();  
  83.             }  
  84.         }  
  85. }  

 

效果如图:

 

 

 

 

canvas.clipRect(30, 30, 70, 70, Region.Op.XOR);最后一个参数有多个选择分别是:

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

分享到:
评论

相关推荐

    Android-使用clippath实现的CircleImageView没有Bitmap没有锯齿

    使用clippath实现的CircleImageView,没有Bitmap,没有锯齿

    基于SVG clipPath的预览图变形特效幻

    基于SVG clipPath的预览图变形特效幻

    SVG clipPath炫酷卡片膨胀动画特效

    这是codrops出品的一款HTML5 SVG clipPath炫酷卡片膨胀动画特效。该特效采用网格卡片布局,当用户点击其中一张卡片的时候,伴随一个非常酷的运动效果,它会切换到另一个页面,并变形为封面图片。

    Android条纹进度条的实现(调整view宽度仿进度条)

    前言 本文主要给大家介绍了关于Android条纹进度条(调整view宽度仿进度条)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍...自定义ImageView,调用canvas.clipPath来切割画布。 public cl

    ClipPath实用的路径拷贝工具

    ClipPath是用来拷贝文件路径的好工具 很实用~ 希望大家多多下载~

    基于SVG clipPath的预览图变形特效幻灯片

    这是一款基于SVG clipPath的预览图变形特效幻灯片。该幻灯片特效结合SVG和clipPath元素制作路径变形动画,在幻灯片前后切换时,前后预览图平滑的变形过渡到屏幕中间。

    基于SVG clipPath的预览图变形特效幻灯片.zip

    这是一款基于SVG clipPath的预览图变形特效幻灯片。该幻灯片特效结合SVG和clipPath元素制作路径变形动画,在幻灯片前后切换时,前后预览图平滑的变形过渡到屏幕中间。

    android图形操作

    android 用canvas.clipPath 画不规则的Bitmap 通过使用canvas.clipPath,可以将一个规则的位图裁剪为不规则的位图 通过canvas.clipPath(path);方法可以达到这个效果

    Android代码-ShapeImageView

    ViewOutlineProvider) 方式实现,API 18 及以上 使用 Canvas.clipPath(Path) 方式实现,API 18 以下 使用 Paint.setXfermode(Xfermode) 方式实现 (使用的是PorterDuffXfermode),均支持动态图;支持固定高宽缩放比...

    Android-eBook翻书效果源码

    canvas.clipPath(path, Region.Op.XOR); canvas.drawBitmap(bitmap, 0, 0, null); canvas.restore(); } private void drawNextPageAreaAndShadow(Canvas canvas, Bitmap bitmap) { mPath1.reset(); ...

    Android代码-HaloImageProgressView

    > 之前看到qq 的图片发送效果很酷炫,很吸引人,不过现在...先保存画布,save()到最后要canvas.restore().因为显示图片,可以有两种选择,第一种:自己绘制图片,通过drawable得方式。第二种:继承ImageView 同时还可以

    Android使用自定义View实现360手机卫士波浪球进度的效果

    (3)有一点需要注意的是,裁剪圆的时候用到的clipPath这个方法,在android 4.1,和4.2等某些系统上,裁剪出来不是圆,而是矩形,针对这些系统 需要在manifest.xml文件的activity中 将硬件加速关掉,因为默认是开启...

    ClipPath:跨浏览器的剪切路径polyfill

    正在安装使用npm: $ npm install clip-path --save 与纱线: $ yarn add clip-path用法香草javascript: ClipPath ( '.target' , '5% 5%, 100% 0%, 100u%' ) ; 使用jQuery: $ ( '.target' ) . ClipPath ( '5% 5%, ...

    CircleImageView:适用于Android的圆形ImageView

    使用clipPath(既不是硬件加速的也不是抗锯齿的) 使用setXfermode裁剪位图(这意味着在画布上绘制两次) 由于这只是一个自定义ImageView,而不是自定义Drawable或两者的组合,因此它可以与所有类型的可绘制对象...

    Android代码-ProjectX

    图形裁剪ImageView,API 21 及以上 使用 View.setOutlineProvider(ViewOutlineProvider) 方式实现,API 18 及以上 使用 Canvas.clipPath(Path) 方式实现,API 18 以下 使用 Paint.setXfermode(Xfermode) 方式实现...

    CSS3 3D金字塔旋转动画特效.zip

     <clipPath id="c1" clipPathUnits="objectBoundingBox">  ,0.00000 0.57794,0.13500 0.42206,0.13500 0.50000,0.00000">  </clipPath>  <clipPath id="c2" clipPathUnits="objectBoundingBox">  ,0.16500 ...

    各种圆形ImageView的实现

    使用Xfermode、BitmapShader、clipPath等方法实现圆形ImageView

    Android自定义AvatarImageView实现头像显示效果

    我们一般实现自定义形状的图形有三种方式:PorterDuffXfermode 、BitmapShader、ClipPath。下面我都会分别说明,我这里实现使用的第一种方式(实现还是比较简单的)。 1.PorterDuffXfermode  这是由Tomas Proter和 ...

    Android10填坑适配指南(实际经验代码)

    Android10填坑适配指南,包含实际经验代码,绝不照搬翻译文档 1.Region.Op相关异常:java.lang.IllegalArgumentException: Invalid Region.Op – only INTERSECT and DIFFERENCE are allowed 当 targetSdkVersion...

    card-expansion:通过低多边形背景动画增强的变形卡扩展效果,使用 SVG clipPath 和 Trianglify

    卡片扩展效果 通过低多边形背景动画增强的变形卡扩展效果,使用 SVG clipPath 和 Trianglify。 执照 由 Claudio Calautti 为 Codrops 创建。 根据。 关注我们: 、 、 、 、

Global site tag (gtag.js) - Google Analytics