如何制作减少数值的函数(例如,从800毫秒减少到200毫秒)

时间:2019-01-10 22:16:35

标签: java android function android-studio android-studio-3.2

计时器的设置时间为800毫秒,因此,总是RandomPositions()将每800毫秒(该时间段)执行一次内部代码。现在,我要的是将这个数字每20秒或20,000毫秒减少50 ,直到周期达到200毫秒。

游戏中的

目标-必须每20秒逐渐增加速度。

示例: 第一次执行-800毫秒, 第二次执行-750毫秒, 第三次执行-700毫秒, 等等...

我认为我可以插入一个Integer类型的函数(而不是800),这可以使这项工作从800毫秒减少到200毫秒。

我该如何执行此功能?还是有其他解决方案?

public void RandomPositions() {

        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask()
        {
            public void run() {

                getWindowManager().getDefaultDisplay().getMetrics(displaymatrics);
                float dx = r.nextFloat() * displaymatrics.widthPixels/1.2f;
                float dy = r.nextFloat() * displaymatrics.heightPixels/1.2f;
                button.animate().x(dx).y(dy).setDuration(0);


            }
        }, 0, 800);  // first value = Delay   , Second value = Period(what I need to change)

2 个答案:

答案 0 :(得分:1)

我不会使用计时器,因为间隔会一直变化。

在香草Android系统中,我可能会使用Handler

Int interval = 800; // milliseconds
Handler handler = new Handler()
Runnable runnable = new Runnable() { 

   @Override void run() {

        //
        // do your logic here
        //

        // decrement interval by 20 milliseconds 
        // if interval - 20 is greater than 200
        interval = interval - 20 > 200 ? interval - 20 : interval;


        // Request an execution of this runnable with the new value of interval
        handler.postDelayed(runnable, interval);
   }
}


public void start() {
   handler.postDelayed(runnable, interval);
}

public void stop() { 
   handler.removeCallbacks(runnable);
}

请确保无论何时要停止removeCallbacks或在用户离开运行它的活动/上下文时都调用它。

答案 1 :(得分:0)

这是使用计时器的解决方案。如果您不想在循环中调用该方法,则每次调用时只需将delay参数减去50。

    public static void main(String[] args) {                
        Timer timer = new Timer();              
        for(int i = 800; i >= 200; i-=50)
        {
            runTimer(timer, i);         
        }   
    }   

    private static void runTimer(Timer timer, int delay) {
        timer.schedule(new TimerTask()
        {
            public void run() {
            }                
        }, 0, delay);  
    }