这会导致Android中的自定义按钮文本更新UI线程(或)onDraw

这会导致Android中的自定义按钮文本更新UI线程(或)onDraw,android,Android,我将一个类子类化为Button并重写了onDraw()方法。并在类的构造函数中编写了一个处理程序,我正在更新一个变量,该变量的值必须更新为按钮文本。下面是代码片段 public class CustomButton extends Button{ CustomButton(){ handler = new Handler(); Runnable runObj = new Runnable(){

我将一个类子类化为Button并重写了onDraw()方法。并在类的构造函数中编写了一个处理程序,我正在更新一个变量,该变量的值必须更新为按钮文本。下面是代码片段

   public class CustomButton extends Button{



        CustomButton(){
                handler = new Handler();
                Runnable runObj = new Runnable(){
                  public void run(){
                      counter++;
                      handler.postDelayed(this,1000);                  
                  }
                };
               handler.post(runObj);
        }

    @Override
    protected void onDraw(Canvas canvas){
        super.onDraw(canvas);       
        setBackgroundResource(R.drawable.button9patch);     
        setTextColor(COMPONENTTEXTCOLOR);
        setText(counter);       
    }

   }
按钮文本得到更新。我知道,当按钮最初渲染时,以及当我们对按钮视图进行一些修改(如设置标签或图像等)时,会调用onDraw()方法

在我的代码中,我在onDraw()方法之外更新计数器,但从onDraw()方法显式调用setText(计数器)。因为我不是从Hanlder代码调用setText(计数器)它是如何定期更新按钮文本的?

导致计数器变量更改的UI线程是否定期更新到按钮

我很困惑


谢谢

您永远不会第一次启动处理程序

handler.postDelayed(runObj,1000);           
更新:

每次更新计数器时,必须强制按钮重新绘制自身:

counter++;
CustomButton.this.postInvalidate();

请更新您的问题格式。下面的文字真的很难读。谢谢你的编辑和回答。实际上,我试图用示例代码解释我的问题。我忘了匆忙添加:-)。我现在添加了。但是这个更改没有回答我的问题。谢谢。所以您的意思是,我们应该在每次计数器更新时通知自定义组件重新绘制。但在我的代码(实际应用程序)中,我看到计数器在每次更新时都会被涂在按钮上(没有任何POSTNVALIDATE)。可能是其他事件导致按钮重新绘制。