我正在开发一个小型Android程序并遇到问题。我必须在我的程序中设置按钮,设置为区域,当它们被触摸时,我希望它们移动一个对象。这很有效。 问题是我希望这些按钮在精灵触摸时保持精灵移动。当我按下其中一个按钮时,它正在执行一次代码。
只要按下按钮,如何使按钮保持对象移动?
谢谢!
Region Rbleft = new Region(135,1585,450,1900);
Region Rbright = new Region(630,1585,945,1900);
public boolean onTouchEvent(MotionEvent event)
{
synchronized (getHolder()){
float x = event.getX();
float y = event.getY();
if(Rbleft.contains((int)x, (int)y)){
if(xw <= getWidth() - (lore.getWidth()/2)){
xw=xw-1;
}
}
else if(Rbright.contains((int)x, (int)y)){
if(xw <= getWidth() - (lore.getWidth()/2)){
xw=xw+1;
}
}
return super.onTouchEvent(event);}
}
答案 0 :(得分:2)
好的这里是一个只计算而不是执行你想要的操作的例子,你可以把你的操作放在doInBackground()
方法中。我在按钮上添加了一个触摸侦听器,而不是仅使用onTouchEvent
。
Button b1;
boolean flag = false;
DoWork doWork;
int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button)findViewById(R.id.button);
b1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
Log.i("TAG", "Action Down Detected");
flag = true;
doWork = new DoWork();
doWork.execute();
return true;
}
if(event.getAction() == MotionEvent.ACTION_UP){
Log.i("TAG", "Action Up Detected");
flag = false;
doWork.cancel(false);
return true;
}
return false;
}
});
}
class DoWork extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
}
@Override
protected Void doInBackground(Void... resId) {
while(flag) {
synchronized (this) {
this.sleep(100);
count++;
}
Log.i("TAG", Integer.toString(count));
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
}
@Override
protected void onPostExecute(Void result) {
}
private void sleep(int delay) {
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
Log.e("TAG", e.toString());
}
}
}
睡眠方法将为您提供速度所需的控制。例如。 1000 = 1秒延迟
答案 1 :(得分:0)
您还可以使用以下过程:
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, final MotionEvent motionEvent) {
if (btn.isPressed()){
countDownTimer = new CountDownTimer(1000,100) {
@Override
public void onTick(long l) {
btn.setEnabled(false);
if (!btn.isPressed()){
countDownTimer.cancel();
btn.setEnabled(true);
}
}
@Override
public void onFinish() {
btn.setEnabled(true);
//do whatever you want
}
}.start();
}
return false;
}
});