话说我写了一个类myView,继承自View。View里面重写了OnDraw方法,只有一句话:System.out.println("OnDraw");
然后灵异事件就开始了:我编写了一个Activity,里面声明了一个myView对象和一个按钮对象,动态添加进Activity而不是用布局文件。当程序只有一行:
setContentView(new myView)
的时候,系统显示调用了一次OnDraw当程序有两行:
setContentView(new myView)
setContentView(new Button)
的时候,系统显示调用了两次OnDraw当我按下按钮不抬起手指的时候,系统显示又调用了一次OnDraw
当我抬起手指的时候,系统显示又调用了一次OnDraw所以我假设只要用户能看到的界面发生类内容的改变,系统会自动将所有可见控件的OnDraw函数回调然后这时候,如果给按钮设置一个监听器,每次点击都调用上面myView的postinvalidata方法,点击一次按钮就会调用一次OnDraw,但这时候OnDraw是由于强制重绘方法调用的,不是因为按下抬起手指导致的按钮样式改变而导致的OnDraw调用(如果像我上面的假设成立的话,按下按钮分别应该产生三次OnDraw调用阿……)android的api太难用了!!!!!
话说这到底是咋回事儿啊?

解决方案 »

  1.   

     myView和Button有重叠Button更新了myView也会重绘,myView完全被重叠不可视时不会重绘。
     postinvalidata只是标记需要重绘,就算标记两次也只是重绘1次的。
      

  2.   


    但是我的代码貌似没有让view与button重叠阿?
    就是两个连续的:
    setContentView(view)
    setContentView(button)
    这样会发生重叠么难道?
      

  3.   


    话说请问高手我还有个问题
    是不是View中有关显示图像的成员变量发生改变就会自动进行重绘?
      

  4.   


    没这个机制图像的成员变量自动进行重绘,这个你定义的成员变量改变了也要手动通知View需要重绘invalidate,改变的是大小还要使用requestLayout;