android中控件公用产生的冲突的解决办法
16lz
2021-01-24
1.ViewPager嵌套HorizontalScrollView滑动冲突的解决办法,重写ViewPager
public class ZdyViewPage extends ViewPager {public ZdyViewPage(Context context) {super(context);}public ZdyViewPage(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected boolean canScroll(View v, boolean arg1, int arg2, int arg3,int arg4) {if (v instanceof HorizontalScrollView) {return true;}return super.canScroll(v, arg1, arg2, arg3, arg4);}}
2.ScrollView嵌套ViewPager滑动冲突的解决办法,重写ScrollView
public class NotifyingScrollView extends ScrollView { private Context mContext; /*避免Scroview和ViewPager控件冲突的解决办法*/ private boolean canScroll; private GestureDetector mGestureDetector; View.OnTouchListener mGestureListener; public NotifyingScrollView(Context context) { super(context); mContext = context; } public NotifyingScrollView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; mGestureDetector = new GestureDetector(new YScrollDetector()); canScroll = true; } public NotifyingScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContext = context; } /*避免Scroview和ViewPager控件冲突的解决办法*/ @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if(ev.getAction() == MotionEvent.ACTION_UP) canScroll = true; return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev); } class YScrollDetector extends SimpleOnGestureListener { @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if(canScroll) if (Math.abs(distanceY) >= Math.abs(distanceX)) canScroll = true; else canScroll = false; return canScroll; } }}
3.ListView嵌套ViewPager滑动冲突的解决办法,重写ListView
public class MyListview extends ListView {private Context mContext;public MyListview(Context context) {super(context);mContext = context;}public MyListview(Context context, AttributeSet attrs, Context mContext) {super(context, attrs);this.mContext = mContext;}public MyListview(Context context, AttributeSet attrs, int defStyle,Context mContext) {super(context, attrs, defStyle);this.mContext = mContext;}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {super.onInterceptTouchEvent(ev);return false;}}
在开发中还会遇到很多的控件组合,大家有遇到过的希望都能把代码贴上来,大家共同学习!!!
更多相关文章
- Android(安卓)GridView设置条目的高度与宽度相等、GridView条目
- Android之View篇3————View滑动冲突的解决
- Android Fragment内嵌Fragment页面不刷新数据问题
- Android studio 新建一个空白工程提示:Conflict with dependency
- Android标题栏最右边添加按钮的实例
- Android中ScrollView中嵌套ViewPager导致ViewPager不显示的问题
- Android:禁止滚动的解决方法
- android中封装http请求
- Android常见错误处理(一)