ScrollView嵌套webview之后滑动冲突的解决方案
来源:互联网 发布:华为交换机 允许mac表 编辑:程序博客网 时间:2024/06/05 22:33
关于ScrollView嵌套webview之后,滑动时出现冲突的解决方案:
我的项目需求是:文章内容是用webview加载的,但是帖子内容里面有一些个人信息等一系列的安卓原生控件,所以必须用scrollView来包裹webview,由于两者都自带有滑动功能,所以产生了让人头疼的滑动冲突。
解决方案:
public class MyScrollView extends ScrollView {// private GestureDetector mGestureDetector;// View.OnTouchListener mGestureListener;//// public MyScrollView(Context context, AttributeSet attrs) {// super(context, attrs);// mGestureDetector = new GestureDetector(context, new YScrollDetector());// setFadingEdgeLength(0);// }//// @Override// public boolean onInterceptTouchEvent(MotionEvent ev) { //拦截事件// return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);// }//// // Return false if we're scrolling in the x direction// class YScrollDetector extends SimpleOnGestureListener {// @Override// public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {// if (Math.abs(distanceY) > Math.abs(distanceX)) {// return true;// }// return false;// }// } public ScrollView parentScrollView; public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } private int lastScrollDelta = 0; public void resume() { overScrollBy(0, -lastScrollDelta, 0, getScrollY(), 0, getScrollRange(), 0, 0, true); lastScrollDelta = 0; } int mTop = 10; /** * 将targetView滚到最顶端 */ public void scrollTo(View targetView) { int oldScrollY = getScrollY(); int top = targetView.getTop() - mTop; int delatY = top - oldScrollY; lastScrollDelta = delatY; overScrollBy(0, delatY, 0, getScrollY(), 0, getScrollRange(), 0, 0, true); } private int getScrollRange() { int scrollRange = 0; if (getChildCount() > 0) { View child = getChildAt(0); scrollRange = Math.max(0, child.getHeight() - (getHeight())); } return scrollRange; } int currentY; @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (parentScrollView == null) { return super.onInterceptTouchEvent(ev); } else { if (ev.getAction() == MotionEvent.ACTION_DOWN) {// 将父scrollview的滚动事件拦截 currentY = (int) ev.getY(); setParentScrollAble(false); return super.onInterceptTouchEvent(ev); } else if (ev.getAction() == MotionEvent.ACTION_UP) {// 把滚动事件恢复给父Scrollview setParentScrollAble(true); } else if (ev.getAction() == MotionEvent.ACTION_MOVE) { } } return super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { View child = getChildAt(0); if (parentScrollView != null) { if (ev.getAction() == MotionEvent.ACTION_MOVE) { int height = child.getMeasuredHeight(); height = height - getMeasuredHeight();// System.out.println("height=" + height); int scrollY = getScrollY();// System.out.println("scrollY" + scrollY); int y = (int) ev.getY();// 手指向下滑动 if (currentY < y) { if (scrollY <= 0) {// 如果向下滑动到头,就把滚动交给父Scrollview setParentScrollAble(true); return false; } else { setParentScrollAble(false); } } else if (currentY > y) { if (scrollY >= height) {// 如果向上滑动到头,就把滚动交给父Scrollview setParentScrollAble(true); return false; } else { setParentScrollAble(false); } } currentY = y; } } return super.onTouchEvent(ev); } /** * 是否把滚动事件交给父scrollview * * @param flag */ private void setParentScrollAble(boolean flag) { parentScrollView.requestDisallowInterceptTouchEvent(!flag); }}
自定义Scrollview时之前也是百度之后写的,就是上面注释掉的代码,是在scrollview拦截了事件,然后根据手势识别器来滑动,这样做可以实现webview和scrollview的嵌套,但是出现了一个问题:当点击webview中图片时或者说webview在某一时刻获取到了事件,就会出现webview滑动不了的问题。这个问题困扰了好久,妈蛋,,,最后看到一篇博客,就是用上面的方式解决了。
<com.boohee.widgets.MyScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/main_bg" android:layout_marginTop="@dimen/default_shadow_margin" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="180dp" > <android.support.v4.view.ViewPager android:id="@+id/vp_top_show" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <LinearLayout android:id="@+id/dot_layout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center_horizontal" android:orientation="horizontal" android:padding="10dp" > </LinearLayout> </RelativeLayout> <WebView android:id="@+id/wv_show" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layerType="software" android:scrollbars="none" /> </LinearLayout> </com.boohee.widgets.MyScrollView>
注意:使用后发现webView加上
之后,有时候加载不出来数据,而且加载数据很慢。所以可以去掉很感谢看到了一位博主的一篇博客。
http://blog.csdn.net/li5685918/article/details/50426932
阅读全文
0 0
- ScrollView嵌套webview之后滑动冲突的解决方案
- Android 开发中scrollview嵌套webview滑动冲突的解决方案
- Android scrollview嵌套webview滑动冲突的解决方案
- Android 开发中scrollview嵌套webview滑动冲突的解决方案
- ScrollView嵌套ListView滑动冲突的解决方案
- ScrollView嵌套Scrollview中滑动时间冲突的解决方案
- android scrollview嵌套webview滑动冲突问题
- ScrollView嵌套WebView滑动冲突问题解决
- ScrollView嵌套ViewPager引起的滑动冲突的解决方案
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- scrollview嵌套webview冲突
- ScrollView嵌套Scrollview滑动冲突
- Android ViewPager、ScrollView或ListView嵌套WebView滑动冲突
- WebView自适应并嵌套在ScrollView 解决左右滑动冲突
- Java,Maven的环境变量配置
- Java数组总结
- Spring中bean的含义
- React-Native 学习笔记1
- 第12周项目2- Kruskal算法的验证
- ScrollView嵌套webview之后滑动冲突的解决方案
- 打印输入中单词长度的水平直方图
- 用java实现把sql语句查询的结果集写到dbf文件中
- coursera视频无法播放的解决方法
- 数据结构(栈)
- Android中TabLayout修改字体大小
- 第九周项目三
- 数据结构上机实践第11周项目1
- 第10周项目3- 中序线索化二叉树的算法验证