解决SwipeRefreshLayout左右滑动事件冲突的问题
生活随笔
收集整理的這篇文章主要介紹了
解决SwipeRefreshLayout左右滑动事件冲突的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在使用SwipeRefreshLayout時我們注意到在SwipeRefreshLayout中左右滑動時可能也會觸發下拉刷新的事件,這點讓我們很不爽。追其原因是SwipeRefreshLayout對于y軸觸摸舉例十分明感,沒有做太多的容差處理(似乎容差值僅有16),所以如果你不是完全水平的滑動的話就很可能會觸發下拉刷新的事件。為了解決這個問題,我們重寫了SwipeRefreshLayout的觸摸事件,當觸摸的X距離大于某個數值的時候,我們就讓它認為我們是在左右滑動,不執行下拉刷新操作。
VerticalSwipeRefreshLayout
?
package kale.com.waterfall.extra.swiprefreshlayout;import android.content.Context; import android.support.v4.widget.SwipeRefreshLayout; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ViewConfiguration;/*** @author Jack Tony* @brief 只在豎直方向才能下拉刷新的控件* @date 2015/4/5*/ public class VerticalSwipeRefreshLayout extends SwipeRefreshLayout {private int mTouchSlop;// 上一次觸摸時的X坐標private float mPrevX;public VerticalSwipeRefreshLayout(Context context, AttributeSet attrs) {super(context, attrs);// 觸發移動事件的最短距離,如果小于這個距離就不觸發移動控件mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();}@Overridepublic boolean onInterceptTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mPrevX = event.getX();break;case MotionEvent.ACTION_MOVE:final float eventX = event.getX();float xDiff = Math.abs(eventX - mPrevX);// Log.d("refresh" ,"move----" + eventX + " " + mPrevX + " " + mTouchSlop);// 增加60的容差,讓下拉刷新在豎直滑動時就可以觸發if (xDiff > mTouchSlop + 60) {return false;}}return super.onInterceptTouchEvent(event);} }?
總結
以上是生活随笔為你收集整理的解决SwipeRefreshLayout左右滑动事件冲突的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法的时间复杂度示例
- 下一篇: Leetcode Wildcard Ma