使用按钮移动对象 - 保持选项

时间:2014-12-15 15:34:45

标签: android button

我正在开发一个小型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);}
    }

2 个答案:

答案 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;

            }
        });