完美解決HorizontalScrollView與ListView滑動事件衝突
阿新 • • 發佈:2019-02-04
HorizontalScrollView與ListView滑動事件衝突,導致ListView下拉不靈敏。下面給出一種比較完美的實現方式,如果是縱向的ScrollView,對應改一下就好了~~上程式碼
package wosai.com.membermarketing.util.layout; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.widget.HorizontalScrollView; /** * 自定義HorizontalScrollView,解決滑動事件衝突 * * Created by yuyh on 2015/10/30. */ public class CustomHorizontalScrollView extends HorizontalScrollView { float lastX, lastY; private GestureDetector mGestureDetector; View.OnTouchListener mGestureListener; public CustomHorizontalScrollView(Context context) { super(context); mGestureDetector = new GestureDetector(context, new YScrollDetector()); setFadingEdgeLength(0); } public CustomHorizontalScrollView(Context context, AttributeSet attrs) { super(context, attrs); mGestureDetector = new GestureDetector(context, new YScrollDetector()); setFadingEdgeLength(0); } public CustomHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mGestureDetector = new GestureDetector(context, new YScrollDetector()); setFadingEdgeLength(0); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev); } /** * 如果豎向滑動距離<橫向距離,執行橫向滑動,否則豎向。如果是ScrollView,則'<'換成'>' */ class YScrollDetector extends GestureDetector.SimpleOnGestureListener { @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if (Math.abs(distanceY) < Math.abs(distanceX)) { return true; } return false; } } }
另:Android View事件分發機制及滑動衝突處理請參考:http://blog.csdn.net/yyh352091626/article/details/50737013