好的,我从https://github.com/hongyangAndroid/Android-CircleMenu获得了以下代码。在这里,从print trace中,我发现构造函数只被调用一次,而run()方法被递归调用直到某些条件。
我的问题是,为什么只有run()方法从postDelayed()递归调用,为什么不是构造函数?以及变量anglePerSecond如何保留该值?我想了解它的流程。谢谢你。
//Automatic scrolling tasks
private class AutoFlingRunnable implements Runnable{
private float anglePerSecond;
public AutoFlingRunnable(float velocity){
this.anglePerSecond = velocity;
}
public void run(){
if((int)Math.abs(anglePerSecond) < 20){
isFling = false;
return;
}
isFling = true;
//anglePerSecond/30 in order to avoid rolling too fast
mStartAngle += (anglePerSecond/30);
//Gradually reduce this value
anglePerSecond /= 1.0666F;
postDelayed(this, 30);
//gradually reduce this value
requestLayout(); //re-layout views
}
}
答案 0 :(得分:1)
如果要更新Activity中的textView,例如带有countdowntimer的textView,通常可以使用以下代码更新它
final int time = 50;
final TextView textView = new TextView(this);
textView.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
textView.setText(String.format("Remaing Time : %d s", time));
}
/*
* Update it after 1 second
* 1秒後更新
*/
},1000);
如果您了解上述代码,请尝试了解以下内容
textView.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
textView.setText(String.format("Remaing Time : %d s", time));
/*
* Update it after 1 second
* 1秒後更新
*/
textView.postDelayed(this, 1000);
}
/*
* Update it after 1 second
* 1秒後更新
*/
},1000);
实际上,您提供的库内部进度相同。 它是那样的剂量。
1.call AutoFlingRunnable consturctor to create
2.方法366行中的电话
3.运行AutoFlingRunnable run()方法
4.在第574行中0.03秒之后运行相同的runnable run()方法
5.回到第3步