android中所有屏幕的显示基本都是依靠回调这个函数,
public void onDraw(Canvas canvas){
............
}
在程序启动之后,执行A.invalidate() ,只是invalidate了屏幕的一部分区域。但是在onDraw第二次次回调中,会render overall screen area.
第二次次调用完成之后,A.invalidate() 执行,只会render 屏幕中无效的那一部分,虽然也会调用不再无效区域中的View.onDraw并执行起内部代码。但是并不重画这部分区域。在android中使用Canvas进行绘画,Canvas类内部都是本地JNI代码。
如下代码 可测试:
这样设计不知google出于什么考虑? 控制源码是哪块?
如果有哪位仁兄知道,请留言,不胜感激!
使Configure 发生变化,也会间接回调onDraw方法(回调几次),而且此时整个屏幕都会被重新绘画。结束后 此时手动某一个View,使其无效,第一次回调onDraw时,也是整个屏幕都会被重新绘画,接下来回调每一个View的onDraw方法,只有无效区域会被重画。。
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方法,只有无效区域会被重画。。