Android之自定义View学习(一)

Canvas常用方法:

                                   图片来源

public class BaseViewDraw extends View {
    private Paint mPaint1;
    private Paint mPaint2;
    private Paint mPaint3;

    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);
    }

    @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);

    }
}

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

时间: 2024-08-29 19:08:14

Android之自定义View学习(一)的相关文章

Android自定义View学习笔记04

Android自定义View学习笔记04 好长时间没有写相关的博客了,前几周在帮学姐做毕设,所以博客方面有些耽误.过程中写了一个类似wp的磁贴的view,想再写个配套的layout,所以昨天看了一下自定义viewGroup的相关知识-晚上睡觉想了一下可行性不是很高-代码量还不如直接自己在xml上写来得快,速度上也是个问题.今天看了一下张鸿洋老师的Android 自定义View (三) 圆环交替 等待效果这篇博文,再加上前一段时间看到的一幅图,结合之前写的一个圆形imageView的实现博文And

Android自定义View学习笔记03

Android自定义View学习笔记03 预备知识 BitMap类 BitMap位图类,其中有一个嵌套类叫Bitmap.Config,内部有四个枚举值.这个类的作用是定义位图存储质量,即存储一个像素的位数,以及是否能显示透明.半透明颜色(Possible bitmap configurations. A bitmap configuration describes how pixels are stored. This affects the quality (color depth) as w

Android自定义view学习笔记02

Android自定义view学习笔记02 本文代码来自于张鸿洋老师的博客之Android 自定义View (二) 进阶 学习笔记,对代码进行些许修改,并补充一些在coding过程中遇到的问题.学习的新东西. 相关代码 //CustomImageView.java package mmrx.com.myuserdefinedview.textview; import android.content.Context; import android.content.res.TypedArray; im

Android 自定义View学习(2)

上一篇学习了基本用法,今天学一下稍微复杂一点的,先看一下效果图 为了完成上面的效果还是要用到上一期开头的四步 1,属性应该要有颜色,要有速度 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="speed" format="integer" /> <attr name="circleColor"

Android中自定义View的MeasureSpec使用

有时,Android系统控件无法满足我们的需求,因此有必要自定义View.具体方法参见官方开发文档:http://developer.android.com/guide/topics/ui/custom-components.html 一般来说,自定义控件都会去重写View的onMeasure方法,因为该方法指定该控件在屏幕上的大小. protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) onMeasure传

android中自定义view涉及到的绘制知识

android中自定义view的过程中,需要了解的绘制知识. 1.画笔paint: 画笔设置: <span style="font-size:14px;"> paint.setAntiAlias(true);//抗锯齿功能 paint.setColor(Color.RED); //设置画笔颜色 paint.setStyle(Style.FILL);//设置填充样式 paint.setStrokeWidth(30);//设置画笔宽度 paint.setShadowLayer(

自定义View学习之12/1

感谢AigeStudio提供的自定义view讲解(地址http://blog.csdn.net/aigestudio)下面是我看了Aige的讲解之后自己的理解以及demo,有说错的地方欢迎大家指出. 在这里自定义一个圆形等级条的view来加强自己对自定义的理解. 思路: 1.需要画一个背景圆,再需要一个覆盖在背景圆上面的进度圆. 2.使用线程让进度圆产生动画. 3.在进度圆达到圆满的时候回到原点,给个回调. 现在我们先画出一个空心圆. 代码块 /** 背景圆的画笔 */ private Pain

Android 自己定义View学习(2)

上一篇学习了基本使用方法,今天学一下略微复杂一点的.先看一下效果图 为了完毕上面的效果还是要用到上一期开头的四步 1,属性应该要有颜色,要有速度 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="speed" format="integer" /> <attr name="circleColor&qu

Android——自定义View(学习Android开发与艺术探索)

ViewRoot和DecorView ViewRoot对应于ViewRootImpl类,是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的.在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView建立关联. View的绘制流程从ViewRoot的performTraversals开始,经过