【问题标题】:onTouchEvent executes twiceonTouchEvent 执行两次
【发布时间】:2011-11-30 05:57:26
【问题描述】:

谁能向我解释为什么onTouchEvent 执行了两次,我怎样才能将它设置为只运行一次?我找不到解释。谢谢。

@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    _iv = new ImageView(this);

    _map = BitmapFactory.decodeResource(getResources(), R.drawable.image);

        _iv.setImageBitmap(_map);
        _iv.invalidate();

    setContentView(_iv);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    double X = event.getX();
    double Y = event.getY();

    Toast.makeText(this, "X: " + X + " Y: " + Y, Toast.LENGTH_SHORT).show();

    return super.onTouchEvent(event);
}

【问题讨论】:

    标签: android android-event


    【解决方案1】:

    它为每个事件执行。在这种情况下,它将用于ACTION_DOWNACTION_UP 事件。它还将多次执行ACTION_MOVE 事件。

    要让它只在一个事件中执行,请执行以下操作:

    switch(event.getAction())
    {
      case MotionEvent.ACTION_DOWN:
        ** CODE ** 
        break;
      case MotionEvent.ACTION_MOVE:
        ** CODE ** 
        break;
      case MotionEvent.ACTION_UP:
        ** CODE **
        break;
    }
    

    【讨论】:

    • 嗨 Deev,我使用 onTouchEvent 将标记放置在地图的触摸上。但我发现 onTOuchEvent 方法被多次调用。我使用了与此处描述的相同的开关盒。但是我的方法仍然被多次调用。你能告诉我为什么会这样吗
    • Android 通常将 onTouchEvents 向下级联视图,直到其中一个返回“true”。如果您的触摸事件已被完全处理并且应该停止,则返回“true”。
    • 好的。感谢您的快速回复。我会试试这个。
    【解决方案2】:

    在 switch 语句中,为所有不需要的事件返回 false。

    【讨论】:

    • 添加与上一张海报类似的示例?否则,此 cmets 不会添加任何内容。
    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    相关资源
    最近更新 更多