View
的详细绘制过程 activity.xml
DrawView.java
在普通View
的绘制过程,直接回调绘制过程相关方法。但是对于ViewGroup
,会在回调到dispatchDraw
的时候,回调子节点的draw
流程。
那么在绘制的时候,到底要做什么呢???
那就是根据实际的业务需求,绘制出需要的UI图。
每一个View
都对应了一个Canvas
(画布),所以绘制的目的地就是这个Canvas
。
Canvas
提供了绘制各种图形的方法,根据算法计算出对应的数据,即可通过Canvas
调用绘制方法。
我们都知道在现实生活中画图时,有画布,画笔。在Android
中,也提供了一个Paint
专门用作在Canvas
中绘图
onDraw
的参数中传递过来)可以认为View
是一块可见区域,Canvas
是是无限大的,但是他们的起点默认是重合的。所以如果图画在了可视区域的外面区域,想要让它显示出来,需要将Canvas
移动,而不是View
.
注意:
绘制过程中需要手动计算padding
, 因为canvas
绘制时,没有将padding
的值排除在外。
activity.xml
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.ung8023.androidbase.view.define.ViewDrawActivity">
<com.ung8023.androidbase.view.define.DrawView
android:padding="20dp"
android:layout_width="200dp"
android:layout_height="200dp" />
android.support.constraint.ConstraintLayout>
DrawView.java
public class DrawView extends View {
Paint paint;
public DrawView(Context context) {
super(context);
init();
}
public DrawView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public DrawView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
void init(){
// 创建画笔
paint = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 设置画笔
paint.setColor(Color.RED);
// 填充模式
paint.setStyle(Paint.Style.FILL);
// 绘制长方形
canvas.drawRect(0,0,100,50, paint);
}
}
Android从整体到局部系列视频教程戳我
我使用的装备:程序员必备 | 不伤关节 | 手感好 | 静电容 | Plum键盘|Niz键盘 戳我