美文网首页
Android ViewPager嵌套WebView横向滑动冲突

Android ViewPager嵌套WebView横向滑动冲突

作者: TimberBug | 来源:发表于2021-05-20 11:53 被阅读0次

主要重写WebView,然后重写onOverScrolled和onTouchEvent方法,具体代码如下:

package com.utv.comp;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.webkit.WebView;
import androidx.core.view.MotionEventCompat;

/** 主要解决viewPager嵌套webView横向滚动问题 */
public class ExtendedWebView extends WebView {

  private boolean isScrollX = false;

  public ExtendedWebView(Context context) {
    super(context);
  }

  public ExtendedWebView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public ExtendedWebView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    if (MotionEventCompat.getPointerCount(event) == 1) {
      switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
          isScrollX = false;
          //事件由webview处理
          getParent().getParent().requestDisallowInterceptTouchEvent(true);
          break;
        case MotionEvent.ACTION_MOVE:
          //嵌套Viewpager时
          getParent().getParent().requestDisallowInterceptTouchEvent(!isScrollX);
          break;
        default:
          getParent().getParent().requestDisallowInterceptTouchEvent(false);
      }
    } else {
      //使webview可以双指缩放(前提是webview必须开启缩放功能,并且加载的网页也支持缩放)
      getParent().getParent().
          requestDisallowInterceptTouchEvent(true);
    }
    return super.onTouchEvent(event);
  }

  @Override
  protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
    super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
    isScrollX = clampedX;
  }
}

相关文章

网友评论

      本文标题:Android ViewPager嵌套WebView横向滑动冲突

      本文链接:https://www.haomeiwen.com/subject/yjnpjltx.html