【问题标题】:Limit Touchevent to one time将 Touchevent 限制为一次
【发布时间】:2014-04-11 13:45:10
【问题描述】:

如何将 Touchevent 限制为一/两次,这意味着用户只能执行一次 touchevent。

这是来自 Touchevent 的代码,我不知道应该如何编辑它,touchevent 只反应一两次。

   @Override
 public boolean onTouchEvent(MotionEvent event) {
    float currentX = event.getX();
    float currentY = event.getY();
    float deltaX, deltaY;
    float scalingFactor = 15.0f / ((box.xMax > box.yMax) ? box.yMax : box.xMax);
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
    deltaX = currentX - previousX; //vorherig(previous)  - aktuell
          deltaY = currentY - previousY;
          ball.speedX += deltaX * scalingFactor;
          ball.speedY += deltaY * scalingFactor;
      break;              
    case MotionEvent.ACTION_UP:
        // Modify rotational angles according to movement

    }
    // Save current x, y
    previousX = currentX;
    previousY = currentY;
    return true;  // Event handled
 }

【问题讨论】:

  • 所以你想让onTouchEvent里面的代码只运行一次?
  • 您可以在用户触摸View时禁用View.setEnabled(false)...

标签: android touch motion


【解决方案1】:

维护一个boolean 变量如下...

boolean touchCounter = false;

@Override
 public boolean onTouchEvent(MotionEvent event) {
    float currentX = event.getX();
    float currentY = event.getY();
    float deltaX, deltaY;
    float scalingFactor = 15.0f / ((box.xMax > box.yMax) ? box.yMax : box.xMax);

    if (touchCounter == false) {

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

             touchCounter = true;

             deltaX = currentX - previousX; //vorherig(previous)  - aktuell
             deltaY = currentY - previousY;
             ball.speedX += deltaX * scalingFactor;
             ball.speedY += deltaY * scalingFactor;
             break;              
        case MotionEvent.ACTION_UP:

             touchCounter = true;

             // Modify rotational angles according to movement
             break;

        }
    }

    // Save current x, y
    previousX = currentX;
    previousY = currentY;
    return true;  // Event handled
 }

【讨论】:

  • 如何增加boolean?我的意思是touchCounter++ 是什么意思,其中touchCounterboolean
  • 非常感谢您,它运行良好! :) 当用户有 2 个触摸事件而不仅仅是一个时,我应该改变什么?
  • 那么您应该使用int 类型的计数器变量来维护它...并根据该计数器应用条件...如果计数器
  • 我把boolean改成int,写了if (touchCounter
  • 你好像对android很了解,我怎么能停球,我认为球必须停在action_up,但我不知道我应该怎么写,我试试ball.speedx--和球速——。并且球应该从设备而不是用户停止。 :)
猜你喜欢
  • 1970-01-01
  • 2012-02-26
  • 2018-07-31
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2021-08-19
相关资源
最近更新 更多