android绘画- View onDraw 一点疑惑

本文深入探讨了Android中视图绘制的基本原理,特别是在onDraw方法的调用过程及Canvas类的作用,通过具体示例代码展示了如何实现视图的局部刷新与整体重绘。
android中所有屏幕的显示基本都是依靠回调这个函数,
public void onDraw(Canvas canvas){
............
}
在程序启动之后,执行A.invalidate() ,只是invalidate了屏幕的一部分区域。但是在onDraw第二次次回调中,会render overall screen area.
第二次次调用完成之后,A.invalidate() 执行,只会render 屏幕中无效的那一部分,虽然也会调用不再无效区域中的View.onDraw并执行起内部代码。但是并不重画这部分区域。在android中使用Canvas进行绘画,Canvas类内部都是本地JNI代码。
如下代码 可测试:
public class DrawView extends View {
Paint mPaint;
private Paint mBackgroudPaint;
private int backgroundColor=0xff0000ff;// 背景颜色
private int mN=0;
public DrawView(Context context) {
super(context);
// TODO Auto-generated constructor stub
mPaint = new Paint();
mPaint.setColor(Color.WHITE);
mPaint.setTextSize(24);

mBackgroudPaint=new Paint();
mBackgroudPaint.setColor(backgroundColor);
}
public void onDraw(Canvas canvas){
Log.d("DrawView", "DrawView in liuwei =="+mN);
mN++;
if(mN>1){
mBackgroudPaint.setColor(0xffff0000);
}
RectF rect=new RectF(0,0,this.getRight()-this.getLeft(),this.getBottom()-this.getTop());
canvas.drawRoundRect(rect, 40.0f, 40.0f, mBackgroudPaint);
for(int i=0;i<mN;i++){
//当无效区域不包括此View时,虽然回调onDraw方法,进而执行此代码,但是因为不再无效//去内,所以不起作用,不会被绘画。
canvas.drawText("读取信息!+ "+ i+" SaveCount== "+canvas.getSaveCount(), 0, 40+24*i, mPaint);
}
}
}

这样设计不知google出于什么考虑? 控制源码是哪块?
如果有哪位仁兄知道,请留言,不胜感激!

使Configure 发生变化,也会间接回调onDraw方法(回调几次),而且此时整个屏幕都会被重新绘画。结束后 此时手动某一个View,使其无效,第一次回调onDraw时,也是整个屏幕都会被重新绘画,接下来回调每一个View的onDraw方法,只有无效区域会被重画。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值