Android: How to detect when a scroll has ended

后端 未结 14 853
误落风尘
误落风尘 2020-11-27 10:54

I am using the onScroll method of GestureDetector.SimpleOnGestureListener to scroll a large bitmap on a canvas. When the scroll has ended I want to redraw the bitmap in case

14条回答
  •  情深已故
    2020-11-27 11:33

    This is what worked for me.

    I've enriched the existing GestureDetector.OnGestureListener with onFingerUp() method. This listener does everything as the built-in GestureDetector and it can also listen to the finger up event (it's not onFling() as this is called only when the finger is lifted up along with a quick swipe action).

    import android.content.Context;
    import android.os.Handler;
    import android.view.GestureDetector;
    import android.view.MotionEvent;
    
    public class FingerUpGestureDetector extends GestureDetector {
        FingerUpGestureDetector.OnGestureListener fListener;
        public FingerUpGestureDetector(Context context, OnGestureListener listener) {
            super(context, listener);
            fListener = listener;
        }
    
        public FingerUpGestureDetector(Context context, GestureDetector.OnGestureListener listener, OnGestureListener fListener) {
            super(context, listener);
            this.fListener = fListener;
        }
    
        public FingerUpGestureDetector(Context context, GestureDetector.OnGestureListener listener, Handler handler, OnGestureListener fListener) {
            super(context, listener, handler);
            this.fListener = fListener;
        }
    
        public FingerUpGestureDetector(Context context, GestureDetector.OnGestureListener listener, Handler handler, boolean unused, OnGestureListener fListener) {
            super(context, listener, handler, unused);
            this.fListener = fListener;
        }
    
        public interface OnGestureListener extends GestureDetector.OnGestureListener {
            boolean onFingerUp(MotionEvent e);
        }
    
        public static class SimpleOnGestureListener extends GestureDetector.SimpleOnGestureListener implements FingerUpGestureDetector.OnGestureListener {
            @Override
            public boolean onFingerUp(MotionEvent e) {
                return false;
            }
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent ev) {
            if (super.onTouchEvent(ev)) return true;
            if (ev.getAction() == MotionEvent.ACTION_UP) {
                return fListener.onFingerUp(ev);
            }
            return false;
        }
    }
    

提交回复
热议问题