当前位置: 代码迷 >> Android >> android绘画- View onDraw 1点疑惑
  详细解决方案

android绘画- View onDraw 1点疑惑

热度:183   发布时间:2016-05-01 14:36:20.0
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方法,只有无效区域会被重画。。
  相关解决方案