Android高级UI开发(四十四)canvas基本知识(2) 裁剪与区域

举报
yd_57386892 发表于 2020/12/28 23:15:54 2020/12/28
【摘要】  裁剪: 裁剪后,canvas只能在裁剪出的这块rectF矩形上进行绘制。 区域: canvas图层上的一块封闭区域,如下rect2这个矩形区域,drawRegion绘制出这个区域。    package com.xiaowei.lsn7_canvas; import android.content.Context;import android.graphics.B...

 裁剪:

裁剪后,canvas只能在裁剪出的这块rectF矩形上进行绘制。
 

区域:

canvas图层上的一块封闭区域,如下rect2这个矩形区域,drawRegion绘制出这个区域。
 

  


  
  1. package com.xiaowei.lsn7_canvas;
  2. import android.content.Context;
  3. import android.graphics.Bitmap;
  4. import android.graphics.Canvas;
  5. import android.graphics.Color;
  6. import android.graphics.Paint;
  7. import android.graphics.Path;
  8. import android.graphics.Rect;
  9. import android.graphics.RectF;
  10. import android.graphics.Region;
  11. import android.graphics.RegionIterator;
  12. import android.graphics.drawable.BitmapDrawable;
  13. import android.util.AttributeSet;
  14. import android.view.View;
  15. /**
  16. * Created by xiaowei on 2019/5/14.
  17. */
  18. public class MyView3 extends View {
  19. private Bitmap mBitmap;
  20. public MyView3(Context context) {
  21. this(context,null);
  22. }
  23. public MyView3(Context context, AttributeSet attrs) {
  24. super(context, attrs);
  25. mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.xyjy2)).getBitmap();
  26. }
  27. @Override
  28. protected void onDraw(Canvas canvas) {
  29. super.onDraw(canvas);
  30. //step1. 裁剪画布练习:裁剪一个矩形路径,并在这个矩形里绘制绿色。
  31. Paint paint = new Paint();
  32. paint.setColor(Color.WHITE);
  33. //裁剪
  34. //没有裁剪前,绿色对整个画布,即整个屏幕染色。
  35. canvas.drawColor(Color.GREEN);
  36. //裁剪一块矩形 rectF
  37. RectF rectF = new RectF(100,100,400,400);
  38. Path path = new Path();
  39. path.addRect(rectF, Path.Direction.CCW);
  40. canvas.save();
  41. canvas.clipPath(path);
  42. //裁剪后,红色只能对裁剪出的这块rectF矩形范围内着色。
  43. canvas.drawColor(Color.RED);
  44. //step2. 区域画布练习:创建一个矩形区域,并用白色画笔画出这个矩形Region区域
  45. //区域:canvas图层上的一块封闭区域,如下rect2这个矩形区域,drawRegion绘制出这个区域。
  46. canvas.restore();//恢复到裁剪前的画布,所以一下rect2的x坐标为0是从整个屏幕左上角开始,并非是上面裁剪矩形path的左上角。
  47. paint.setStyle(Paint.Style.FILL);
  48. Rect rect2 = new Rect(0,800,100,900);
  49. Region region = new Region(rect2);
  50. drawRegion(canvas,region,paint);
  51. }
  52. private void drawRegion(Canvas canvas,Region rgn,Paint paint)
  53. {
  54. RegionIterator iter = new RegionIterator(rgn);
  55. Rect r = new Rect();
  56. while (iter.next(r)) {
  57. canvas.drawRect(r, paint);
  58. }
  59. }
  60. }

 参考资料:https://blog.csdn.net/yaorugang/article/details/42519363?ops_request_misc=&request_id=&biz_id=102&utm_source=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0

文章来源: blog.csdn.net,作者:冉航--小虾米,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/gaoxiaoweiandy/article/details/105840550

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。