登录 立即注册
安币:

探究Android View 绘制流程,Canvas 的由来 [复制链接]

2018-1-12 12:07
看我眼前007 阅读:396 评论:1 赞:3
Tag:  AndroidView
基于 Android API 26 Platform 源码

写作背景


Google 搜索关键字 『android view 绘制』能得到很多资料。通常从以下几个方面讲解:

1. Measure -> layout -> draw 过程解析。
2. Paint 、Canvas 、Drawable 、Bitmap 的使用。
3. View/ViewGroup 的绘制顺序。
4. View 的测量过程。
5. 自定义 View 要重载

大部分文章写的都非常棒,讲的很详细。

但是始终有一个问题一直困扰着我: View如何绘制到屏幕上!!!

所以本文重点只讲 View 如何绘制到屏幕上的,其他 View 绘制流程大家自行 Google 或者参考Android视图绘制流程完全解析,带你一步步深入了解View(二)

自定义一个简单的 View

本应该从 View 的源代码入手,但是发现 View.java 文件的源码大概有 26488 行。这么长的代码,直接啃下去不知道要耗费多少头发。只好另辟蹊径。

先看一段代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final Paint mPaint = new Paint();
        mPaint.setColor(0xffff0000);
        mPaint.setStrokeWidth(10);
        setContentView(new View(this) {
            @Override
            protected void onDraw(Canvas canvas) {
                canvas.drawLine(0, 0, getWidth(), getHeight(), mPaint);

            }
        });
    }
}

代码比较简单,我们从屏幕左上方到右下方画了一条红色的直线。

1. 把绘制的代码放在 onDraw() 方法中
2. 创建一个 Paint(画笔) ,设置颜色画笔宽度。
3. 调用 canvas.drawLine(0, 0, getWidth(), getHeight(), mPaint)
   前四个参数