【问题标题】:android - start an activity onTouchandroid - 启动一个活动 onTouch
【发布时间】:2016-12-24 20:11:08
【问题描述】:

在我的应用程序中,我有一个从五到一的倒计时。目前,一旦活动开始,计数器就会开始。我想要的是停留在 5 秒并等待倒计时直到屏幕被触摸。所以倒数计时器应该启动哪个触摸事件。

    public class MainActivity extends Activity implements OnGestureListener {
    private static final String FORMAT = "%02d:%02d";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);

        new CountDownTimer(5000, 10) {
            public void onTick(long millisUntilFinished) {
                text.setText("" + String.format("%02d:%03d",
                        TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)),
                        TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished))
                ));

                if (animationRunning) {
                    cancel();
                }
            }

            public void onFinish() {
                text.setText("done!");
            }
        }.start();
    }


    @Override
    public boolean onTouchEvent(MotionEvent touchevent) {

    }
}

【问题讨论】:

    标签: java android


    【解决方案1】:

    将倒数计时器放在 onTouch 中,如下所示

    public class MainActivity extends Activity implements OnGestureListener {
        private static final String FORMAT = "%02d:%02d";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_game);
    
    
        }
    
    
        @Override
        public boolean onTouchEvent(MotionEvent touchevent) {
            new CountDownTimer(5000, 10) {
                public void onTick(long millisUntilFinished) {
                    text.setText("" + String.format("%02d:%03d",
                            TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)),
                            TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished))
                    ));
    
                    if (animationRunning) {
                        cancel();
                    }
                }
    
                public void onFinish() {
                    text.setText("done!");
                }
            }.start();
        }
    }
    

    【讨论】:

    • 好的,有道理。如果倒计时是方法的一部分,我该怎么办?
    • 在 onTouchEvent 中调用你的方法或为 onTouchEvent 创建一个新的倒计时:)
    • 那么有没有办法“暂停”活动,直到第一次启动应用程序时触摸屏幕?
    • 将所有代码放在一个方法中并在 onTouchEvent 中调用该方法
    • 如果你只是第一次想要它,那么你必须将你的第一次启动保存在共享首选项中,如果有帮助,请接受答案:)
    【解决方案2】:

    将这部分代码移动到您的 onTouchEvent 中,因为它在 Activity 创建时,这就是它在您的 Activity 启动时启动的原因

    new CountDownTimer(5000, 10) {
        public void onTick(long millisUntilFinished) {
            text.setText("" + String.format("%02d:%03d",
                    TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)),
                    TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished))
            ));
    
            if (animationRunning) {
                cancel();
            }
        }
    
        public void onFinish() {
            text.setText("done!");
        }
    }.start();
    

    你应该没事的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多