我正在使用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
类的onKeyUp
和onKeyDown
,检查KEYCODE_ENTER
KeyEvent