1

如果我移动手指,这可以正常工作,但如果我只是点击(从 ACTION_DOWN 到 ACTION_UP 而没有经过 ACTION_MOVE)它不会画任何东西。任何想法?

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawPath(path, paint);   
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    float eventX = event.getX();
    float eventY = event.getY();

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            path.moveTo(eventX, eventY);
            path.lineTo(eventX, eventY);
        return true;
        case MotionEvent.ACTION_MOVE:
            path.lineTo(eventX, eventY);
        break;
        case MotionEvent.ACTION_UP:
            path.lineTo(eventX, eventY);
        break;
        default:
        return false;
    }

    // Schedules a repaint.
    invalidate();
    return true;
}
}

我想出的最接近的答案是检查 eventx 和 y 是否与 ActionUP 中的最后一个相同,并在 x 和 y 中添加 +1 ...

4

3 回答 3

1

要让它在一个简单的水龙头上也能做一些事情,你必须做一些类似的事情:

boolean notMoved = true;
switch (event.getAction()) {

    case MotionEvent.ACTION_DOWN:
        path.moveTo(eventX, eventY);
    return true;

    case MotionEvent.ACTION_MOVE:
        path.lineTo(eventX, eventY);
        notMoved = false;
    break;

    case MotionEvent.ACTION_UP:
        if(notMoved) {
            //draw something
            path.lineTo(eventX, eventY);
        }
    break;
    default:
    return false;
}
于 2013-03-07T23:25:53.157 回答
1

...在您的 MotionEvent.ACTION_UP 案例中做点什么而不是什么都不做。一个开始的东西:

if (moved) {
  moved = false;
  // on-tap behavior
}

ACTION_MOVE 案例设置标志的位置。您的下一步:让 ACTION_DOWN 和 ACTION_MOVE 共享有关坐标的注释,从而更轻松地点击而不会意外“移动”。

于 2013-03-07T23:26:14.010 回答
0

也许

break;

代替

return true;
于 2013-03-07T23:25:48.687 回答