上一篇讲的自定义view说的不够精简,这篇说的详细点,简单点,大家一起学习
自定义绘制的方式是重写绘制方法,绘制方法不是一个,其中最常用的是 onDraw(),onDraw()负责的是View的整体绘制,具体执行绘制操作的是onDraw()里面的canvas参数
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
绘制的关键是 Canvas 的使用
Canvas 的绘制类方法: drawXXX() (关键参数:Paint)
Canvas 的辅助类方法:范围裁切和几何变换
这里就使用canvas来画一个圆跟一个正方形
先自定义一个TextView(随便写的,不要计较),构造函数都要实现
public class MyTextView extends TextView {
Paint paint = new Paint();
public MyTextView(Context context) {
super(context);
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MyTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(450,450,50,paint); //画圆 其中450表示坐标位置,圆的x、y轴坐标位置都是圆心的位置,50表示圆的半径
canvas.drawRect(300,250,400,350,paint); 画正方形
}
}
上面用到了paint对象,paint可以设置颜色,设置线条的粗细,阴影啊一系列东西。
下面再讲两个方法
Canvas.drawXXX()是针对整个画布进行操作
Paint是对你画出来的东西进行操作,比如刚才画的圆,我们可以通过paint.setColor(Color.parseColor("#88880000"));来设置圆的背景色
Paint 类的几个最常用的方法。具体是:
Paint.setStyle(Style style) 设置绘制模式
Paint.setColor(int color) 设置颜色
Paint.setStrokeWidth(float width) 设置线条宽度
Paint.setTextSize(float textSize) 设置文字大小
Paint.setAntiAlias(boolean aa) 设置抗锯齿开关
我去。。。。。。。。。。。说自定义View我怎么把坐标系这个概念忘了说,f**k。
赶紧百度一下
View 提供了如下 5 种方法获取 View 的坐标:
- View.getTop()、View.getLeft()、View.getBottom()、View.getRight();
- View.getX()、View.getY();
- View.getTranslationX()、View.getTranslationY();
- View.getLocationOnScreen(int[] position);
- View.getLocationInWindow(int[] position);
好了,图是拷贝来的,作者的博客链接是https://blog.csdn.net/u013872857/article/details/53750682
可以去学习下View的坐标系概念,我就是懒,忘了去总结下,就不多说了这个,百度一下有很多人讲的比我详细的多,2333333333
上面说过了怎么给圆设置背景,接下来就设置一个红色的圆吧
onDraw()方法里这样操作就好啦
paint.setColor(Color.RED); // 设置为红色
canvas.drawCircle(300, 300, 200, paint);
如果要设置一个空心圆的话,上面已经说过了,通过paint对象就可以啦
把绘制模式改为画线模式就好啦
paint.setStyle(Paint.Style.STROKE);
这里是通过paint对象的style方法对画的内容来设置一个style
通过代码可以看到,style有三种,之前的代码告诉我们这里style默认使用的是FILL这种填充模式,STROKE就是。。。啥呢,不填充模式(画线模式),FILL_AND_STROKE就是既画线也填充
这样问题又来了,马丹UI喜欢设计一下,这个线要多粗多粗,怎么办?
Paint.setStrokeWidth(float width)这个方法一下子就把UI的要求解决了,我们可以通过这个方法来设置线条的宽度
这里的单位是像素。
经常遇到写按钮的时候,按钮需要一个弧度,圆角矩形。一般自己定义个shape,然后设置颜色啊什么的,遇到变态的,颜色不一致还要设置多个shape。
下面就来画一下圆角矩形
canvas.drawRoundRect(100, 100, 500, 300, 50, 50, paint);
其中,left, top, right, bottom 是四条边的坐标,rx、ry是圆角的弧度,就是圆角的横向半径和纵向半径
画椭圆就是canvas.drawOval(50, 50, 350, 200, paint);都是canvas的方法堆砌啦
画线canvas.drawLine(200, 200, 800, 500, paint); 方法里的参数startX, startY, stopX, stopY 分别是线的起点和终点坐标。
下面再说一下 绘制扇形和弧形图
left, top, right, bottom 描述的是这个弧形所在的椭圆;startAngle 是弧形的起始角度(x 轴的正向,即正右的方向,是 0 度的位置;顺时针为正角度,逆时针为负角度),sweepAngle 是弧形划过的角度;useCenter 表示是否连接到圆心,如果不连接到圆心,就是弧形,如果连接到圆心,就是扇形。
这篇就说这些简单的利用canvas画一些简单的图吧~~~