日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PullToRefreshListView中嵌套ViewPager滑动冲突的解决

發布時間:2023/11/30 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PullToRefreshListView中嵌套ViewPager滑动冲突的解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PullToRefreshListView中嵌套ViewPager滑動沖突的解決

最近恰好遇到PullToRefreshListView中需要嵌套ViewPager的情況,ViewPager 作為頭部添加到ListView中,發先ViewPager在滑動過程中流暢性太差幾乎很難左右滑動。在網上也看了很多大神的介紹,看了ViewPager的源碼。其實思路很簡單,只不過沒有看到有教完整的說明,為了幫轉像我這樣的green hand 少走彎路,將過程整理下。大神自動略過~_~:

滑動沖突的解決大概要處理的問題無非是事件分發,事件攔截,和事件的處理,關于這部分內容大家可以在網上查看相關的資料,基本原理比較容易理解。有了這部分內容做鋪墊。下面正式進入正題。

解決這個問題有兩種實現方式

一 首先采取了給ViewPager設置監聽的方式

vPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int arg0) {//該方法是ViewPager滑動結束后,頁面別選定后調用此方法/*在ViewPager滑動結束后需要通知父容器(ListView)可以* 對后續的事件進行適當的處理了(包括自身事件的攔截)*/lsv.requestDisallowInterceptTouchEvent(false);}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {//該方法是ViewPager滑動時調用此方法/*在ViewPager滑動時需要通知父容器(ListView)不要攔截,也就是說此事件交給ViewPager處理*/lsv.requestDisallowInterceptTouchEvent(true); }@Overridepublic void onPageScrollStateChanged(int arg0) {//該方法是ViewPager滑動狀態發生變化時調用此方法//這里暫時不要進行相關的操作。 } });

?



這種方式可以解決ViewPager左右滑動與listView的沖突問題,但是會有一個問題,此時在VIewPager上的下拉事件也被ViewPager接收,只能在ViewPager下邊下拉才能實現PullToRefreshListView 的下拉刷新效果。?

如果不需要下拉刷新,普通的ListView 通過上面的方式完全可以達到預期的效果

二 重寫ViewPager的disPatchTouchEvent方法

基本思路就是要重寫ViewPager的disPatchTouchEvent方法,通過比較x、y軸的移動距離,決定事件是否自己進行處理。

package com.ccq.tuangou.myview;import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent;public class MyViewPager extends ViewPager {float mDownX;float mDownY;public MyViewPager(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {switch (ev.getAction()) {case MotionEvent.ACTION_DOWN://DOWN 事件的時候記錄下當前的xy左標mDownX=ev.getX();mDownY=ev.getY();getParent().requestDisallowInterceptTouchEvent(true);break;case MotionEvent.ACTION_MOVE:/*MOVE 事件后計算x軸y軸的移動距離 ,如果x軸移動距離大于y軸,那么該事件有ViewPager處理,否則交給父容器處理*/if(Math.abs(ev.getX()-mDownX)>Math.abs(ev.getY()-mDownY)){getParent().requestDisallowInterceptTouchEvent(true);}else{getParent().requestDisallowInterceptTouchEvent(false);}break;case MotionEvent.ACTION_CANCEL:getParent().requestDisallowInterceptTouchEvent(false);break;default:break;}return super.dispatchTouchEvent(ev);} }

?

轉載于:https://www.cnblogs.com/zhujiabin/p/7326553.html

總結

以上是生活随笔為你收集整理的PullToRefreshListView中嵌套ViewPager滑动冲突的解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。