zoukankan      html  css  js  c++  java
  • Android之自定义View学习(一)

    Android之自定义View学习(一)

    Canvas常用方法:

                                       图片来源

    /**
     * Created by SiberiaDante on 2017/6/3.
     */
    
    public class BaseViewDraw extends View {
        private Paint mPaint1;
        private Paint mPaint2;
        private Paint mPaint3;
        private Paint mPaint4;
    
        public BaseViewDraw(Context context) {
            super(context);
        }
    
        public BaseViewDraw(Context context, AttributeSet attrs) {
            super(context, attrs);
            initPaint();//初始化画笔
        }
    
        public BaseViewDraw(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        private void initPaint() {
            mPaint1 = new Paint();
            mPaint1.setColor(Color.BLUE);//设置画笔颜色
            mPaint1.setStrokeWidth(10f);//设置画笔宽度
            mPaint1.setStyle(Paint.Style.FILL);//设置画笔填充模式
    
            mPaint2 = new Paint();
            mPaint2.setColor(Color.RED);
            mPaint2.setStrokeWidth(20f);
            mPaint2.setStyle(Paint.Style.FILL_AND_STROKE);
    
            mPaint3 = new Paint();
            mPaint3.setColor(Color.BLACK);
            mPaint3.setStrokeWidth(15f);
            mPaint3.setStyle(Paint.Style.STROKE);
    
            mPaint4 = new Paint();
            mPaint4.setColor(Color.GREEN);
            mPaint4.setStrokeWidth(5f);
            mPaint4.setStyle(Paint.Style.STROKE);
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            /**
             * 画颜色
             * 了解更多canvas前往官方文档:https://developer.android.com/reference/android/graphics/Canvas.html
             */
            canvas.drawColor(Color.GRAY);
            /**
             * 画点
             */
            canvas.drawPoint(200, 200, mPaint1);//画一个点----200,200分别代表在想,x,y轴上的坐标
            canvas.drawPoints(
                    new float[]{//画多个点
                            300, 300,
                            300, 400,
                            300, 500
                    }, mPaint1);
            /**
             * 画线条
             */
            canvas.drawLine(10, 10, 200, 500, mPaint1);//10,10代表起点,200,500代表终点
            canvas.drawLines(new float[]{//画多条线段
                    20, 20, 600, 20,
                    50, 200, 50, 600}, mPaint1);
    
            /**
             * 画矩形,三种写法
             * 了解更多 Rect前往官方文档:https://developer.android.com/reference/android/graphics/Rect.html
             * 了解更多 RectF前往官方文档:http://developer.android.com/reference/android/graphics/RectF.html
             */
            //第一种
            canvas.drawRect(500, 100, 800, 400, mPaint1);
            //第二种
            final Rect rect = new Rect(500, 500, 800, 800);
            canvas.drawRect(rect, mPaint1);
            //第三种
            final RectF rectF = new RectF(500, 900, 800, 1200);
            canvas.drawRect(rectF, mPaint1);
            /**
             * 绘制圆角矩形
             */
            //方法一
            final RectF rectF1 = new RectF(100, 900, 400, 1200);
            //10,30分别代表圆弧的半径
            canvas.drawRoundRect(rectF1, 10, 30, mPaint2);
            //方法二
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                //这种写法仅支持API21+
                canvas.drawRoundRect(100, 900, 400, 1200, 10, 30, mPaint2);
            }
    
            /**
             * 画椭圆
             * 350为矩形x轴长度的一半
             * 150为矩形y轴长度的一半
             */
            final RectF rectF2 = new RectF(100, 500, 800, 800);
            canvas.drawRoundRect(rectF2, 350, 150, mPaint3);
    
            /**
             * 画圆
             * 350为矩形x轴长度的一半
             * 350为矩形y轴长度的一半
             * 当矩形的长和宽相等时,即为圆
             */
            //方法一:利用矩形绘制椭圆技巧
            final RectF rectF3 = new RectF(100, 500, 800, 1200);
            canvas.drawRoundRect(rectF3, 350, 350, mPaint3);
            //方法二:550,800代表圆心位置,400代表圆半径
            canvas.drawCircle(550, 800, 400, mPaint3);
    
            /**
             * 画圆弧
             * 0,90分别代表弧度的起始和结束弧度,顺时针为正,区分数学中的逆时针为正
             * 第三个Boolean型参数:true为使用中心点,false为不使用中心点,即为一段弧线(不填充状态下)
             */
            final RectF rectF4 = new RectF(400, 400, 800, 1200);
            canvas.drawArc(rectF4, 0, 90, true, mPaint4);
    
            final RectF rectF5 = new RectF(100, 400, 400, 1200);
            canvas.drawArc(rectF5, 0, 90, false, mPaint4);
    
        }
    }

    github地址:https://github.com/SiberiaDante/DrawView

  • 相关阅读:
    EAX、ECX、EDX、EBX寄存器的作用
    MFC VS2005 添加Override 和 Message
    ActiveX添加测试工程, 出现的问题[非选择性参数][找不到成员]
    两种应该掌握的排序方法--------2.quick Sort
    关于I/O的那点事
    整理一下 编码、解码库
    VC一些经验系列: 《分享泄漏检测工具:内存、DC、GDI、Handle... 》
    golang安装卸载 linux+windows+raspberryPI 平台
    (转)如何正确使用C++多重继承
    单播、多播(也称组播)、广播
  • 原文地址:https://www.cnblogs.com/shen-hua/p/6937658.html
Copyright © 2011-2022 走看看