2

我有一个用于长按下状态按钮的动作类。它真的很好用!

但是有人知道为什么在这个代码块中我的活动开始了 2 次吗?当我按下后退按钮时,我必须这样做 2 次。

感谢您的帮助!


这是我的java代码:

   Button MenuBtnStart;  

   final Handler handlerBtnStart = new Handler();

          MenuBtnStart.setOnTouchListener(new OnTouchListener() {
          public boolean onTouch(final View v, MotionEvent event) {

          MenuBtnStart.setBackgroundDrawable(getResources().getDrawable(R.drawable.hover));

                 v.setPressed(true);

                 handlerBtnStart.postDelayed(new Runnable() {

                           public void run() {

                            Intent myIntent = new Intent(TextActivity.this, NextActivity.class);
                            TextActivity.this.startActivity(myIntent);

                        v.setPressed(false);

                    }

                }, 900);  // end of Handler new Runnable()

                 return true;
          } 

 });  // end of OnTouchListener()
4

3 回答 3

3

DOWN仅当操作为;时才应激活它。在此之后可能会有一个MOVEorUP动作,这将再次激活它。

final Handler handlerBtnStart = new Handler();

MenuBtnStart.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(final View v, MotionEvent event) {
        int action = event.getAction() & MotionEvent.ACTION_MASK;

        if (action == MotionEvent.ACTION_DOWN) { 
            MenuBtnStart.setBackgroundDrawable(getResources().getDrawable(R.drawable.hover));

            v.setPressed(true);

            handlerBtnStart.postDelayed(new Runnable() {

                public void run() {

                    Intent myIntent = new Intent(ThisActivity.this, NextActivity.class);
                    ThisActivity.this.startActivity(myIntent);

                    v.setPressed(false);

                }

            }, 900);  // end of Handler new Runnable()

            return true;
        }

        return false;
    }

});  // end of OnTouchListener()
于 2012-08-02T17:34:02.550 回答
0

onKeyUp()我认为它在两者上都被调用onKeyDown()- 这些是你应该覆盖的方法,而不是onTouch().

编辑:

我没有仔细阅读 - 你在长时间点击之后,我一开始没有得到它。我曾经收到类似问题的一个很好的答案。看一下:如何在长按时访问菜单按钮

于 2012-08-02T17:33:22.040 回答
0

您应该处理 ACTION_DOWN 事件。

if (event.getAction() == MotionEvent.ACTION_DOWN){

// Do Something
}
return true;
于 2012-08-02T18:03:14.530 回答