xml引用自定义view 包名+控件名
<com.mycompany.myapphuizhi.NewButton
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
新建类,继承view,重写ondraw方法
public class NewButton extends View {
Paint paint = new Paint();//画笔
//注意构造函数,最起码要实现这个attrs属性从xml传入
public NewButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void draw(Canvas canvas) {
//canvas画布
super.draw(canvas);
paint.setColor(Color.YELLOW);
canvas.drawCircle(300, 300, 200, paint);
}
}
坐标系
自定义view - 草稿
canvas画布
底板
canvas.drawRGB(100, 200, 100);
canvas.drawARGB(100, 100, 200, 100);
canvas.drawColor(Color.parseColor("#88880000")); // 半透明红色
canvas.drawColor(Color.BLACK); // 纯黑
形状
drawCircle(centerX, centerY, radius, paint)
paint画笔
Paint.setStyle(Style style) 设置绘制模式
paint.setStyle(Paint.Style.STROKE) 来把绘制模式改为画线模式。
Style 具体来说有三 种: FILL, STROKE 和 FILL_AND_STROKE 。FILL 是填充模式,STROKE 是画线模式(即勾边模式),FILL_AND_STROKE 是两种模式一并使用:既画线又填充。它的默认值是 FILL,填充模式。
自定义view - 草稿Paint.setColor(int color) 设置颜色
默认黑色
paint.setColor(Color.YELLOW);自定义view - 草稿
Paint.setStrokeWidth(float width) 设置描边线条宽度
在 STROKE 和 FILL_AND_STROKE 下,还可以使用 paint.setStrokeWidth(float width) 来设置描边线条的宽度:
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(20); // 线条宽度为 20 像素
canvas.drawCircle(300, 300, 200, paint);自定义view - 草稿
抗锯齿
在绘制的时候,往往需要开启抗锯齿来让图形和文字的边缘更加平滑。开启抗锯齿很简单,只要在 new Paint() 的时候加上一个 ANTI_ALIAS_FLAG 参数就行:
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);自定义view - 草稿
Paint.setTextSize(float textSize) 设置文字大小
Paint.setAntiAlias(boolean aa) 设置抗锯齿
绘制顺序
自定义view - 草稿背景,它的绘制发生在一个叫 drawBackground() 的方法里,但这个方法是 private 的,不能重写,你如果要设置背景,只能用自带的 API 去设置(xml 布局文件的 android:background 属性以及 Java 代码的 View.setBackgroundXxx() 方法,这个每个人都用得很 6 了),而不能自定义绘制;而第 4、5 两步——滑动边缘渐变和滑动条以及前景,这两部分被合在一起放在了 onDrawForeground() 方法里,这个方法是可以重写的。
draw() 总调度方法
// View.java 的 draw() 方法的简化版大致结构(是大致结构,不是源码哦):
public void draw(Canvas canvas) {
...
drawBackground(Canvas); // 绘制背景(不能重写)
onDraw(Canvas); // 绘制主体
dispatchDraw(Canvas); // 绘制子 View
onDrawForeground(Canvas); // 绘制滑动相关和前景
...
}
待续
网友评论