概述
在Android中,我们经常会需要去绘制一些自己需要的控件,所以继承自View的自定义View就产生了。这篇文章主要介绍在View中的重要类,Paint,画笔类。
Paint的作用
如果把Canvas比作画布的话,那么Paint就是画笔,负责画出各种图形,设置画笔的参数非常多,这里我们只简单介绍几个重要的方法,其余的可以自行实践。
- 初始化,
Paint paint = new Paint();
这样我们就完成了Paint的初始化了,下面我们用一个简单的例子对Paint的使用进行说明
用Paint绘制一个简单的圆
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import androidx.annotation.Nullable;
/**
* create by xu.tian
*
* @date 2021/8/22
*/
public class MyView extends View {
public static final String TAG = MyView.class.getSimpleName();
private Paint paint = new Paint();
private int width ;
private int height ;
public MyView(Context context) {
super(context);
}
public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Log.d(TAG,"onDraw");
// 设置画笔的宽度
paint.setStrokeWidth(5f);
// 设置画笔的颜色
paint.setColor(Color.RED);
// 设置画笔的Style
paint.setStyle(Paint.Style.FILL);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w,h,oldw,oldh);
width = w ;
height = h ;
Log.d(TAG,"onSizeChanged width ---> "+w+"\n"+
"height ---> "+h+"\n"+
"oldw ---> "+oldw+"\n"+
"oldh ---> "+oldh);
}
}
用法很简单,我们在这里简单的在应用的画面中心绘制了一个红色的圆,运行效果如下
device-2021-08-22-141307.png
在这里,我们把Paint的初始化并没有放在onDraw()方法中,原因是在实际的应用中,onDraw的调用可能会比较频繁,为了避免反复创建Paint对象,所以我们只进行了一次Paint的初始化
Paint的几个常用的重要方法
- setStrokeWidth(float width) 设置画笔的宽度,单位为px
- setColor(int color) 设置画笔的颜色
-
setStyle(Style style) 设置画笔的Style
主要使用有三种类型
第一种是 Style.FILL 这是选择填充内部,比如这里我们使用后出现了一个内部填充的圆
第二种是 Style.STROKE 这是选择带边界但内部不填充,如果使用后我们会得到一个内部空心的圆,就像下面这样
device-2021-08-22-143249.png
第三种是 Style.FILL_AND_STROKE 带边界且内部填充,及既带边界又填充内部,就像下面这样
device-2021-08-22-143358.png
这里可能看起来 不是很明显,如果你把Paint的画笔宽度调宽一点后就会明显看出来这是前两种类型图的并集
总结
Paint中还有很多的参数可以设置,这里就不一一进行说明了,下一篇开始我们介绍如和利用Canvas绘制更多的图形
网友评论