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