日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

android - scrollView和listview滑動(dòng)沖突

瀏覽:222日期:2024-08-27 08:24:59

問題描述

在scrollview內(nèi)嵌套了一個(gè)viewpager,重寫了scrollview的onInterceptTouchEvent()方法,但是我寫的沒有什么效果,最近剛剛接觸這個(gè)滑動(dòng)沖突不能很好理解。

public class ScrollViewX extends ScrollView { private static final String TAG = 'ScrollViewX'; private ViewPager mViewPager; private int mLastXIntercepted = 0; private int mLastYIntercepted = 0; public ScrollViewX(Context context) {super(context); } public ScrollViewX(Context context, AttributeSet attrs) {super(context, attrs); } public ScrollViewX(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) {boolean intercepted = false;int x = (int) ev.getX();int y = (int) ev.getY();int deltaX = x - mLastXIntercepted;int deltaY = y - mLastYIntercepted;mLastXIntercepted = x;mLastYIntercepted = y;switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: {//action_down不攔截intercepted = false;break; } case MotionEvent.ACTION_MOVE: {if(mViewPager != null && isTouchInView(mViewPager, ev)){ //點(diǎn)擊事件發(fā)生在viewpager范圍內(nèi) if(Math.abs(deltaY) > Math.abs(deltaX)) {//如果豎直方向的滑動(dòng)距離大于橫向, 那么scrollview攔截intercepted = true; } else {intercepted = false; }} else { intercepted = false;}break; } case MotionEvent.ACTION_UP: {intercepted = false;break; } default: break;}return intercepted; } //判斷點(diǎn)擊事件是否在當(dāng)前view中 private boolean isTouchInView(View view, MotionEvent event) {int x = (int) event.getRawX();int y = (int) event.getRawY();int[] local = new int[2];view.getLocationOnScreen(local);int subVX = local[0];int subVY = local[1];int subWidth = view.getWidth();int subHeight = view.getHeight();if(x > subVX && x < subVX + subWidth && y > subVY && y < subVY + subHeight) { return true;}return false; } public void setViewPager(ViewPager viewPager) {mViewPager = viewPager; }}

android - scrollView和listview滑動(dòng)沖突

我在紅色部分左右滑動(dòng)viewpager能夠正常,但是在viewpager中豎直滑動(dòng)就不能滾動(dòng)scrollview,但是我覺得我在scrollview的onInterceptTouchEvent()方法中已經(jīng)判斷了,但是最終卻沒有效果。

感謝采納的那位,根據(jù)他的提示, 我順便解決了listview的滑動(dòng)沖突。 現(xiàn)在使用外部攔截法: 重寫ScrollView 的 onInterceptedTouchEvent() 方法,

public class ScrollViewX extends ScrollView { private static final String TAG = 'ScrollViewX'; private ListViewX mListViewX; private ViewPager mViewPager; private int mLastX = 0; private int mLastY = 0; public ScrollViewX(Context context) {super(context); } public ScrollViewX(Context context, AttributeSet attrs) {super(context, attrs); } public ScrollViewX(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) {boolean intercepted = false;int x = (int) ev.getX();int y = (int) ev.getY();int deltaX = x - mLastX;int deltaY = y - mLastY;Log.i(TAG, 'deltaY = ' + deltaY);mLastX = x;mLastY = y;switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: {return super.onInterceptTouchEvent(ev); } case MotionEvent.ACTION_MOVE: {if(mViewPager != null && isTouchInView(mViewPager, ev)){ //點(diǎn)擊事件發(fā)生在viewpager范圍內(nèi) if(Math.abs(deltaY) > Math.abs(deltaX)) {//如果豎直方向的滑動(dòng)距離大于橫向, 那么scrollview攔截return true; } else {return super.onInterceptTouchEvent(ev); }} else if(mListViewX != null && isTouchInView(mListViewX, ev)) { if(atTopOrEnd(deltaY)) {return true; } else {return false; }} else { return super.onInterceptTouchEvent(ev);} } case MotionEvent.ACTION_UP: {return super.onInterceptTouchEvent(ev); } default:break;}return super.onInterceptTouchEvent(ev); } //如果listView滑到頂端時(shí)當(dāng)前事件向上滑動(dòng),需要scrollview接管, 在底端時(shí)類似。 private boolean atTopOrEnd(int len) {int count = mListViewX.getCount();int topId = mListViewX.getFirstVisiblePosition();int endId = mListViewX.getLastVisiblePosition();if((endId == count - 1 && len < 0)) { View lastView = mListViewX.getChildAt(mListViewX.getChildCount() - 1); if(lastView.getBottom() == mListViewX.getHeight()) {return true; }}if(topId == 0 && len > 0) { View firstView = mListViewX.getChildAt(topId); if(firstView.getTop() == 0) {return true; }}return false; } //判斷點(diǎn)擊事件是否在當(dāng)前view中 private boolean isTouchInView(View view, MotionEvent event) {int x = (int) event.getRawX();int y = (int) event.getRawY();int[] local = new int[2];view.getLocationOnScreen(local);int subVX = local[0];int subVY = local[1];int subWidth = view.getWidth();int subHeight = view.getHeight();if(x > subVX && x < subVX + subWidth && y > subVY && y < subVY + subHeight) { return true;}return false; } public void setListViewX(ListViewX listViewX) {mListViewX = listViewX; } public void setViewPager(ViewPager viewPager) {mViewPager = viewPager; }}

采用內(nèi)部攔截法: 重寫listview 的 dispatchTouchEvent() 方法

public class ListViewX extends ListView { private static final String TAG = 'ListViewX'; private int mLastX = 0; private int mLastY = 0; public ListViewX(Context context) {super(context); } public ListViewX(Context context, AttributeSet attrs) {super(context, attrs); } public ListViewX(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr); } //ListView 在 ScrollView中顯示需要處理 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int widthMode = MeasureSpec.getMode(widthMeasureSpec);int widthSize = MeasureSpec.getSize(widthMeasureSpec);int heightMode = MeasureSpec.getMode(heightMeasureSpec);int heightSize = MeasureSpec.getSize(heightMeasureSpec);int width;int height;if(widthMode == MeasureSpec.AT_MOST && heightMode == MeasureSpec.AT_MOST) { width = MeasureSpec.makeMeasureSpec(500, MeasureSpec.AT_MOST); height = MeasureSpec.makeMeasureSpec(500, MeasureSpec.AT_MOST);} else if(widthMode == MeasureSpec.AT_MOST) { width = MeasureSpec.makeMeasureSpec(500, MeasureSpec.AT_MOST); height = heightMeasureSpec;} else if(heightMode == MeasureSpec.AT_MOST) { width = widthMeasureSpec; height = MeasureSpec.makeMeasureSpec(500, MeasureSpec.AT_MOST);} else { width = widthMeasureSpec; height = heightMeasureSpec;}super.onMeasure(width, height); } //requestDisallowInterceptTouchEvent參數(shù)為false表示父容器攔截 @Override public boolean dispatchTouchEvent(MotionEvent ev) {int x = (int) ev.getX();int y = (int) ev.getY();switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: {//父容器不攔截getParent().requestDisallowInterceptTouchEvent(true);break; } case MotionEvent.ACTION_MOVE: {int deltaX = x - mLastX;int deltaY = y - mLastY;if(atTopOrEnd(deltaY)) { getParent().requestDisallowInterceptTouchEvent(false);}break; } case MotionEvent.ACTION_UP: {break; } default:break;}mLastX = x;mLastY = y;return super.dispatchTouchEvent(ev); } //如果listView滑到頂端時(shí)當(dāng)前事件向上滑動(dòng),需要scrollview接管, 在底端時(shí)類似。 private boolean atTopOrEnd(int len) {int count = getCount();int topId = getFirstVisiblePosition();int endId = getLastVisiblePosition();if((endId == count - 1 && len < 0)) { View lastView = getChildAt(getChildCount() - 1); if(lastView.getBottom() == getHeight()) {return true; }}if(topId == 0 && len > 0) { View firstView = getChildAt(topId); if(firstView.getTop() == 0) {return true; }}return false; }}

問題解答

回答1:

因?yàn)閂iewPager的onTouch事件已經(jīng)“吃掉”了手勢,你可以重寫ViewPager的onTouch事件,假如手勢是豎直方向的移動(dòng),return false

回答2:

要重寫listview的測量子Item的寬高的方法,你這個(gè)網(wǎng)上搜一下很多的

相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久久网站| 亚洲二区免费| 亚州av一区| 午夜亚洲精品| 久久都是精品| 亚洲视频电影在线| 日本a级不卡| 欧美一区成人| 91精品视频一区二区| 国产精品一区二区中文字幕| 国产精品日韩精品在线播放| 欧美精品二区| 亚洲精品成人图区| 国产日韩欧美在线播放不卡| 91午夜精品| 久久只有精品| 日韩精品免费一区二区在线观看 | 国产精品yjizz视频网| 国产成人免费视频网站视频社区| 久久青青视频| 亚洲91视频| 免费成人性网站| 亚洲精选91| 蜜臀av一区二区在线免费观看| 一区二区亚洲视频| 国产亚洲久久| 91视频一区| 欧美成人久久| 日韩中文字幕一区二区高清99| 国产精品嫩模av在线| 国产精品1区| 久久国产直播| 亚洲天堂免费| 国产精品丝袜在线播放| 福利视频一区| 黑丝美女一区二区| 日韩欧美精品一区二区综合视频| 国产欧美日韩免费观看| 鲁大师精品99久久久| 免费中文字幕日韩欧美| 婷婷五月色综合香五月| 欧美精品97| 日韩精品免费一区二区在线观看| 免费精品视频| 91精品国产自产精品男人的天堂 | 激情自拍一区| 蜜桃视频在线观看一区二区| 久久av日韩| 亚洲午夜91| 日本亚洲最大的色成网站www| 日韩国产在线不卡视频| 久久影院资源站| 在线亚洲精品| 欧美精品不卡| 国产一区白浆| 精品久久97| 亚洲一区二区日韩| 高清日韩欧美| 中文字幕日韩欧美精品高清在线| 精品久久一区| 亚洲色图国产| 日韩电影免费在线观看| 综合亚洲色图| 91精品蜜臀一区二区三区在线 | 日韩黄色免费网站| 婷婷综合社区| 理论片午夜视频在线观看| 精品国产中文字幕第一页| 精精国产xxxx视频在线播放| 亚洲精品成人一区| 日韩视频网站在线观看| 少妇精品久久久一区二区三区| 国产精品成久久久久| 亚洲精品福利| 欧美精品一区二区三区精品| 久久99久久人婷婷精品综合| 石原莉奈在线亚洲二区| 97欧美在线视频| 国产一区二区精品| 成人片免费看| 欧美另类中文字幕| 9国产精品视频| 免费观看亚洲| 精品91福利视频| 日本一区免费网站| 亚洲美洲欧洲综合国产一区| 日韩av免费大片| 国产日韩一区二区三区在线| 麻豆精品91| 久久国产电影| 精品中文在线| 日本午夜精品一区二区三区电影| 一区三区视频| 97se综合| 国产精品115| 国产欧美午夜| 国产福利一区二区三区在线播放| 欧美日韩亚洲一区在线观看| 夜久久久久久| 在线手机中文字幕| 国产精品免费精品自在线观看| 蜜臀av在线播放一区二区三区| 久久精品青草| 中文av在线全新| 国产欧美欧美| 欧美偷窥清纯综合图区| 亚州欧美在线| 亚洲精品精选| 好看的亚洲午夜视频在线| 99热精品久久| 久久蜜桃av| 91精品蜜臀一区二区三区在线| 欧产日产国产精品视频| 国际精品欧美精品| 精品女同一区二区三区在线观看| 国产精品久久久久久av公交车| 欧美日韩a区| 日韩福利在线观看| 天堂久久av| 国产日韩在线观看视频| 日韩不卡在线观看日韩不卡视频| 日韩一区欧美二区| 亚洲人成网站在线在线观看| 国产 日韩 欧美一区| 91精品韩国| 国产亚洲一区二区手机在线观看| 国产美女高潮在线观看| 97精品一区| 色综合www| 红桃视频国产精品| 蜜桃视频一区二区三区在线观看| 国产精品嫩草99av在线| 99国产精品久久久久久久成人热 | 国产亚洲一卡2卡3卡4卡新区| 日本不卡视频在线观看| 亚洲人www| 清纯唯美亚洲综合一区| 国产精品毛片aⅴ一区二区三区| 你懂的国产精品永久在线| 麻豆精品视频在线观看免费| 精品免费在线| 成人羞羞视频在线看网址| 99riav1国产精品视频| 另类av一区二区| 日本亚州欧洲精品不卡| 久久国产三级精品| 精品国产美女a久久9999| 97在线精品| 激情五月综合网| 综合亚洲视频| 日精品一区二区三区| 免费观看亚洲天堂| 精品国产第一福利网站| 亚洲激精日韩激精欧美精品| 亚洲三级在线| 国产精品成人国产| 99国产精品免费视频观看| 日韩视频免费| 亚洲字幕久久| 久久久免费人体| 精精国产xxxx视频在线播放 | 国产精品嫩草影院在线看| 国际精品欧美精品| 免费看av不卡| 免费不卡在线观看| 欧美激情视频一区二区三区免费| 国产福利91精品一区二区| 欧美日中文字幕| 蜜桃视频一区二区| 精品午夜视频| 久久中文字幕二区| 综合国产精品| 97精品视频在线看| 久久亚洲电影| 麻豆一区二区99久久久久| 国产中文一区| 日韩精品a在线观看91| 91亚洲成人| 欧美综合二区| 九九九精品视频| 综合一区二区三区| 美女av在线免费看| 亚洲精品在线a| 高潮一区二区| 日韩 欧美一区二区三区| 成人影视亚洲图片在线| 久久av在线| 日韩欧美一区二区三区在线视频 | 免费在线观看成人| 在线观看一区| 日韩精品一区二区三区免费观影| 中文字幕日韩高清在线| 成人国产精品一区二区免费麻豆| 99国产成+人+综合+亚洲欧美| 久久精品凹凸全集| 午夜欧美精品久久久久久久| 国产福利亚洲| 视频一区视频二区中文| 日韩成人a**站| 日韩精选在线|