android绘画- View onDraw 一点疑惑

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方法,只有无效区域会被重画。。

你可能感兴趣的:(android,Google,jni)