1

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

rightButton.setOnClickListener(new OnClickListener()
    {

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

    }); 
4

3 回答 3

2

你会试试这个另一种方法吗?

首先将您的按钮声明为类变量,声明一个 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);
    }

}); 
于 2013-05-12T04:55:15.000 回答
0

尝试:

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;
    }
});

参考:

运动事件

OnTouchListener

或者,覆盖onKeyUponKeyDownViewand 并检查KEYCODE_ENTER KeyEvent

于 2013-05-12T04:44:51.650 回答
0

创建一个循环来更新视图,等待,并在等待完成后调用自身。在循环中,有一个带有布尔字段的动画 if 语句,该字段在 true 上移动,在 false 上不移动。让 onClick 方法切换布尔字段的值。

于 2013-05-12T04:40:11.740 回答