我怎么能使一段代码循环,而按下按钮,并停止它一旦按钮不再按下



我正在使用Eclipse中的android开发人员工具,在Java中编程,并且我需要使对象在按下按钮时在屏幕上移动。我已经做了几个小时的研究,但我找不到任何方法来完成这项工作。我试过运行线程,经常崩溃或似乎不执行。我还尝试了一个onClickListener,它读取按钮状态并使用它来确定按钮是否仍按下。我目前使用的是while循环,但这只是冻结程序。我相信这是最好的方法,我已经尝试使用线程。为了限制每秒的迭代次数,我相信这就是它冻结的原因。我是走对了路还是走错了方向?下面是一段代码:

rightButton.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View arg0) 
        {
            while(arg0.isPressed())
            {
                mover.updateCoordinates(1,  0);
            }
        }
    }); 

你会尝试另一种方法吗?

首先声明你的按钮为类变量,声明一个Handler和一个Runnable:

private Button rightButton; // You will assign this in onCreate() method
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable() {
    @Override
    public void run() {
        if(rightButton.isPressed())
        {
            // If press state is pressed, move your item and recall the runnable in 100 milliseconds.
            mover.updateCoordinates(1,  0);
            mHandler.postDelayed(mRunnable, 100);
        }
    }
};

然后你的按钮的onClickListener看起来像这样:

rightButton.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View arg0) 
    {
        // Instead of performing a loop here, just call a runnable, do simple press state checking there.
        mHandler.postDelayed(mRunnable, 100);
    }
}); 

创建一个循环,更新视图,等待,并在等待完成后调用自己。在循环中,有一个动画if语句,其中有一个布尔字段,当为真时移动,当为假时不移动。让onClick方法切换布尔字段的值

尝试:

myView.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent e) {
        if (e.getAction() == MotionEvent.ACTION_DOWN) {
            // Start your animation here
        } else if (e.getAction() == MotionEvent.ACTION_UP) {
            // Stop your animation here
        }
       return false;
    }
});

引用:

MotionEvent

OnTouchListener

或者,覆盖View类的onKeyUponKeyDown,检查KEYCODE_ENTER KeyEvent

最新更新