zoukankan      html  css  js  c++  java
  • Canvas裁剪和Region、RegionIterator

    主要是看这边文章学习:http://blog.csdn.net/lonelyroamer/article/details/8349601

    Region.op参数

    1. DIFFERENCE(0), //最终区域为region1 与 region2不同的区域  
    2. INTERSECT(1), // 最终区域为region1 与 region2相交的区域  
    3. UNION(2),      //最终区域为region1 与 region2组合一起的区域  
    4. XOR(3),        //最终区域为region1 与 region2相交之外的区域  
    5. REVERSE_DIFFERENCE(4), //最终区域为region2 与 region1不同的区域  
    6. REPLACE(5); //最终区域为为region2的区域 

    Canvas裁剪相关方法:

    1、最基本的clipRect,裁剪一个矩形

    2、clipPath,裁剪Path包括的范围,Path所包括的范围不是空的才有效。

    3、clipRegion。

    public class CustomView extends View {
        private Context context;
        // 画笔变量,必创建
        private Paint paint;
        private Path path;
    
        public CustomView(Context context) {
            super(context);
            this.context = context;
            initView();
        }
    
        public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            this.context = context;
            initView();
        }
    
        public CustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.context = context;
            initView();
        }
    
        private void initView() {
            paint = new Paint();
            // 抗锯齿
            paint.setAntiAlias(true);
            paint.setTextSize(6);
            // 绘制文字的位置
            // Paint.Align.CENTER
            // Paint.Align.LEFT
            // Paint.Align.LEFT
            paint.setTextAlign(Paint.Align.RIGHT);
    
            path = new Path();
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            // 設置畫布顏色
            canvas.drawColor(Color.YELLOW);
            // 具体讲解:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0304/960.html
            // save:用来保存Canvas的状态。save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作。
            // restore:用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。
            canvas.save();
            // 画布进行水平移动
            canvas.translate(10, 10);
            drawScene(canvas);
            canvas.restore();
    
            // 开始裁剪操作
    
            // 首先保存画布状态
            canvas.save();
            canvas.translate(160, 10);
            canvas.clipRect(20, 20, 100, 100);
    
            // Region,中文意思即区域的意思,它表示的是canvas图层上的某一块封闭的区域。
            // 参考http://blog.csdn.net/lonelyroamer/article/details/8349601
            // Region.Op.INTERSECT
            // Region.Op.REPLACE
            // Region.Op.REVERSE_DIFFERENCE
            // Region.Op.UNION
            // Region.Op.XOR
            // Region.Op.DIFFERENCE
            canvas.clipRect(40, 40, 80, 80, Region.Op.DIFFERENCE);
            drawScene(canvas);
        }
    
        private void drawScene(Canvas canvas) {
            // 绘制矩形 0,0左上角,100,100右下角
            canvas.clipRect(0, 0, 100, 100);
            // 画布颜色为白色
            canvas.drawColor(Color.WHITE);
            // 画笔为红色
            paint.setColor(Color.RED);
            // 绘制线条,从矩形左上角绘制到矩形右下角
            canvas.drawLine(0, 0, 100, 100, paint);
            // 画笔颜色为绿色
            paint.setColor(Color.GREEN);
            // 画圆,中心点,30,70,半径30
            canvas.drawCircle(30, 70, 30, paint);
            // 画笔为蓝色
            paint.setColor(Color.BLUE);
            // 绘制文字,文字坐标100,30
            canvas.drawText("Clipping", 100, 30, paint);
        }
    
    }

    效果:

    //还不算详细,后面补

  • 相关阅读:
    初窥AndroidPlot(一)
    Android Studio安装、配置
    Android SDK Android NDK Android Studio 官方下载地址及方式
    学习Android图表绘制
    ActionBar研究(二)
    获取Android版本信息和程序版本号
    Android手机获取通话记录和短信记录
    Android开发之监听或获取手机短信内容【转】
    android 几种发送短信的方法【转】
    android开源框架android-async-http
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/5679716.html
Copyright © 2011-2022 走看看