Android:视图的postDelayed(runnable,milliSeconds)如何与递归runnable一起使用?

时间:2016-02-26 04:42:31

标签: android recursion view runnable postdelayed

好的,我从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
    }
}

1 个答案:

答案 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步