Android onFling没有响应

Kev*_*ore 7 android

我首先是android新手,所以首先想想任何新手的错误

我想在我的代码中添加一个fling函数.

public class MainGamePanel extends SurfaceView implements
    SurfaceHolder.Callback, OnGestureListener {

private MainThread thread;
private Droid droid;
private Droid droid2;
private static final String TAG = gameView.class.getSimpleName();
private GestureDetector gestureScanner;

public MainGamePanel(Context context){
        super(context);
        getHolder().addCallback(this);
        droid = new Droid(BitmapFactory.decodeResource(getResources(), R.drawable.playerbox2), 270, 300);
        droid2 = new Droid(BitmapFactory.decodeResource(getResources(), R.drawable.playerbox2), 50, 300);
        thread = new MainThread(getHolder(), this);
        setFocusable(true);
        gestureScanner = new GestureDetector(this);
}


    public boolean onTouchEvent(MotionEvent event){
    return gestureScanner.onTouchEvent(event);
}


@Override
protected void onDraw(Canvas canvas){
    canvas.drawColor(Color.BLACK);
    droid.draw(canvas);
    droid2.draw(canvas);
}

@Override
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float                         velocityY)
    {
         droid.setX(50);
        droid.setY(50);
        Log.d(TAG, "Coords: x=" + e1.getX() + ",y=" + e2.getY());
        return true;
    }

@Override
public boolean onDown(MotionEvent e) {
    droid2.setX((int)e.getX());
    droid2.setY((int)e.getY());


    Log.d(TAG, "Coords: x=" + e.getX() + ",y=" + e.getY());
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我得到了gestureListener:onDown,onLongPress和onShowPress.

但我无法对onFling,onSingleTapUp和onScroll做出任何回应.

我犯了什么错误?它与观点有关吗?

我不知道看到什么代码有用....所以任何建议都会非常感激.谢谢!

Fra*_*ita 51

onDownonFling事件发生之前调用.如果在onDown方法中返回false ,则运动事件传播将停止.

尝试return false在方法return true结束时进行更改onDown.

在Dev指南的Input Events页面中,有点迟钝地解释了返回值.(在示例代码下方向下滚动以查看).

  • @Francesco Laurita:你的建议很有效.但在onFling()之前调用onScroll().Fling被检测为onDown().. onScroll().. onScroll().... onFling().但是我只重写了onDown()以返回true.我没有覆盖onScroll().代码仍然有效,为什么? (2认同)

小智 7

您需要将视图设置为longclickable,如下所示:

 yourView.setLongClickable(true);
Run Code Online (Sandbox Code Playgroud)