【问题标题】:ImageView.setOnTouchListener detects no long movementsImageView.setOnTouchListener 没有检测到长时间的动作
【发布时间】:2025-12-30 05:20:20
【问题描述】:

我想用 ImageView 制作一个游戏杆。 用户将触摸视图并移动“棒”。

ivjoystick.setOnTouchListener(new View.OnTouchListener() {          
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            touch(event);
            return true;
        }
    });

当用户触摸视图时调用 touch 方法,检测到事件并且操纵杆按需要工作。 一旦手指离开“起点”,就不再调用 onTouch 方法(在手指移动时)。游戏机冻结了。

此行为与 touch 方法的作用无关。但是,这是它的代码:

private void touch(MotionEvent event) {
    if (!(event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE || event.getAction() == MotionEvent.ACTION_UP))
        return;
    double oldx = x;
    double oldy = y;

    x = (event.getX() - centerx) / rpad;
    y = (event.getY() - centery) / rpad;

    if (Math.sqrt(x * x + y * y) > 1) {
        x /= Math.sqrt(x * x + y * y);
        y /= Math.sqrt(x * x + y * y);
    }

    if (event.getAction() == MotionEvent.ACTION_UP) {
        x = 0;
        y = 0;
    }

    if (SystemClock.uptimeMillis() - last < minintervall && event.getAction() == MotionEvent.ACTION_MOVE)
        return;

    if (oldx != x || oldy != y) {
        draw();
        send();
    }

    return;     
}

【问题讨论】:

    标签: java android imageview


    【解决方案1】:

    我认为您需要将触摸方法连接到 ondraglistener

    【讨论】:

    • onDrag() 在 ImageView 被触摸时根本不会被调用。
    【解决方案2】:

    ImageView 在 ScrollView 中。滚动视图以某种方式将较长的移动用于滚动。

    我删除了滚动视图。

    【讨论】: