From 8f0326d0c0e040c6f6be07a88b891bc90eb06ac9 Mon Sep 17 00:00:00 2001 From: Ellen2018 <1961075191@qq.com> Date: Thu, 27 Jun 2019 21:03:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=9A=90=E6=82=A3=E7=9A=84?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E5=86=B2=E7=AA=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TableHorizontalScrollView.java | 100 ++++++++++++++++++ .../src/main/res/layout/layout_view_table.xml | 8 +- 2 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 tableview/src/main/java/com/ellen/tableview/supertableview/adapter/superadapter/TableHorizontalScrollView.java diff --git a/tableview/src/main/java/com/ellen/tableview/supertableview/adapter/superadapter/TableHorizontalScrollView.java b/tableview/src/main/java/com/ellen/tableview/supertableview/adapter/superadapter/TableHorizontalScrollView.java new file mode 100644 index 0000000..6c1cdd5 --- /dev/null +++ b/tableview/src/main/java/com/ellen/tableview/supertableview/adapter/superadapter/TableHorizontalScrollView.java @@ -0,0 +1,100 @@ +package com.ellen.tableview.supertableview.adapter.superadapter; + +import android.content.Context; +import android.os.Build; +import android.support.annotation.RequiresApi; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.widget.HorizontalScrollView; + +/** + * 解决与viewpager的滑动冲突问题 + * + * @author: WEI + * @date: 2018/6/25 + */ +public class TableHorizontalScrollView extends HorizontalScrollView { + private final static String TAG = "CusHorizontalScrollView"; + + public TableHorizontalScrollView(Context context) { + super(context); + } + + public TableHorizontalScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public TableHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public TableHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + return super.onInterceptTouchEvent(ev); + } + + /** + * 可以在此处理冲突 + * @param ev + * @return + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + // 还没滑到右边,请求父控件不要拦截我的事件,事件自己处理 true ;已经滑到右边,则事件交由父控件处理 false。 +// getParent().requestDisallowInterceptTouchEvent(!isScrollToRight()); + return super.dispatchTouchEvent(ev); + } + + /** + * 也可以在此处理冲突 + * @param ev + * @return + */ + @Override + public boolean onTouchEvent(MotionEvent ev) + { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + break; + + case MotionEvent.ACTION_MOVE: + if (isScrollToLeft() || isScrollToRight()) + { + // 把事件交给父控件处理,例如:viewpager滑动 + getParent().requestDisallowInterceptTouchEvent(false); + } + break; + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + // 请求父控件可以拦截事件 + getParent().requestDisallowInterceptTouchEvent(false); + break; + + default: + } + return super.onTouchEvent(ev); + } + + /** + * 是否已经滑到了最右边 + * + * @return + */ + private boolean isScrollToRight() { + return getChildAt(getChildCount() - 1).getRight() == getScrollX() + getWidth(); + } + + /** + * 是否已经滑到了最左边 + * @return + */ + private boolean isScrollToLeft() { + return getScrollX() == 0; + } +} \ No newline at end of file diff --git a/tableview/src/main/res/layout/layout_view_table.xml b/tableview/src/main/res/layout/layout_view_table.xml index 0c8cfa6..7c81ee7 100644 --- a/tableview/src/main/res/layout/layout_view_table.xml +++ b/tableview/src/main/res/layout/layout_view_table.xml @@ -3,7 +3,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + - - +