Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid onDoubleTap, onScroll, onFling not working, but onDown and onLongPress works?
    primarykey
    data
    text
    <p>I am trying to use the onScroll method in my custom View. onDown and onLongPress work, but why doesn't my onScroll or onFling or onDoubleTap work? Here's my code, it's almost everything as Google provided it in their developer.android.com website...</p> <pre><code>import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.support.v4.view.GestureDetectorCompat; import android.support.v4.view.MotionEventCompat; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.*; public class GameView extends View implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener{ public static int cols = 10; public static int rows = 9; private String DEBUG_TAG = "Debug"; private GestureDetectorCompat mDetector; private GameThread mGameThread; private Sprite mSprite; private MineField mMineField; private Context context; private Paint mPaint; public GameView(Context context) { super(context); this.context = context; if(mMineField == null)buildMineField(cols, rows); mPaint = new Paint(); mSprite = new Sprite(context, this); mGameThread = new GameThread(this, mSprite, mMineField); mGameThread.start(); mPaint.setColor(Color.WHITE); mPaint.setStyle(Style.FILL); mPaint.setTextSize(50); mDetector = new GestureDetectorCompat(context, this); } public Sprite getSprite() { return mSprite; } public MineField getMineField() { return mMineField; } public void buildMineField(int cols, int rows) { if(cols &gt;= 1 &amp;&amp; rows &gt;= 1) { mMineField = new MineField(cols, rows, context, this); } } public void drawMineField(Canvas canvas) { for(int i = 0; i &lt; mMineField.rows; i++) { for(int j = 0; j &lt; mMineField.cols; j++) { canvas.drawBitmap(mMineField.mines[j][i].getBitmap(), mMineField.mines[j][i].getX(), mMineField.mines[j][i].getY(), null); } } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.BLACK); drawMineField(canvas); if(mSprite.isVisible()) { canvas.drawBitmap(mSprite.getBitmap(), mSprite.getX(), mSprite.getY(), null); } canvas.drawText(Long.toString(mGameThread.getFPS()), 50, 50, mPaint); } @Override public void postInvalidate() { super.postInvalidate(); } @Override public boolean onTouchEvent(MotionEvent event) { this.mDetector.onTouchEvent(event); return super.onTouchEvent(event); } @Override public boolean onDoubleTap(MotionEvent arg0) { // TODO Auto-generated method stub return false; } @Override public boolean onDoubleTapEvent(MotionEvent e) { Log.d(DEBUG_TAG, "onDoubleTap: " + e.toString()); return true; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override public boolean onDown(MotionEvent arg0) { Log.d(DEBUG_TAG,"onDown: " + arg0.toString()); return true; } @Override public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) { // TODO Auto-generated method stub return false; } @Override public void onLongPress(MotionEvent arg0) { Log.d(DEBUG_TAG, "onLongPress: " + arg0.toString()); } @Override public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) { Log.d(DEBUG_TAG, "onScroll"); return true; } @Override public void onShowPress(MotionEvent arg0) { // TODO Auto-generated method stub } @Override public boolean onSingleTapUp(MotionEvent arg0) { // TODO Auto-generated method stub return false; } } </code></pre> <p>I just updated the code and the onDown() method was edited to "return false"</p> <pre><code>@Override public boolean onTouchEvent(MotionEvent event){ this.mDetector.onTouchEvent(event); // Be sure to call the superclass implementation return super.onTouchEvent(event); } @Override public boolean onDown(MotionEvent event) { Log.d(DEBUG_TAG,"onDown: " + event.toString()); return false; } @Override public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { Log.d(DEBUG_TAG, "onFling: " + event1.toString()+event2.toString()); return true; } @Override public void onLongPress(MotionEvent event) { Log.d(DEBUG_TAG, "onLongPress: " + event.toString()); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.d(DEBUG_TAG, "onScroll: " + e1.toString()+e2.toString()); return true; } @Override public void onShowPress(MotionEvent event) { Log.d(DEBUG_TAG, "onShowPress: " + event.toString()); } @Override public boolean onSingleTapUp(MotionEvent event) { Log.d(DEBUG_TAG, "onSingleTapUp: " + event.toString()); return true; } @Override public boolean onDoubleTap(MotionEvent event) { Log.d(DEBUG_TAG, "onDoubleTap: " + event.toString()); return true; } @Override public boolean onDoubleTapEvent(MotionEvent event) { Log.d(DEBUG_TAG, "onDoubleTapEvent: " + event.toString()); return true; } @Override public boolean onSingleTapConfirmed(MotionEvent event) { Log.d(DEBUG_TAG, "onSingleTapConfirmed: " + event.toString()); return true; } </code></pre> <p>But nevertheless, when touching the screen I get a "OnDown" debug notification as well as an "OnShowPress" and "OnLongPress"... But I've set the return to false?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload