ScrollView内嵌套 WebView WebView 拦截滚动事件问题

  1. 问题描述:
    为了满足文本描述样式多样性,支持富文本展示,想到了好快多省的WebView,
    该区域位于ScrollView中,但是当滑动到WebView中,滑动就不再会起作用。

  2. 解决思路:
    自定义继承WebView,监听滚动,拿到滚动距离,在回调中将滚动距离作用到外层的scrollview上。

  3. 具体实现:
    自定义PowerWebView:
    import android.content.Context;
    import android.util.AttributeSet;
    import android.webkit.WebView;

    public class PowerWebView extends WebView {

    private OnScrollChangedCallback mOnScrollChangedCallback;
    
    public PowerWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }
    
    public PowerWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
    
    public PowerWebView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
    
    public void setOnScrollChangedCallback(
            final OnScrollChangedCallback onScrollChangedCallback) {
        mOnScrollChangedCallback = onScrollChangedCallback;
    }
    
    public static interface OnScrollChangedCallback {
        public void onScroll(int deltaY);
    }
    
    @Override
    public boolean overScrollBy(int deltaX, int deltaY, int scrollX,
            int scrollY, int scrollRangeX, int scrollRangeY,
            int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
        if (mOnScrollChangedCallback != null) {
            mOnScrollChangedCallback.onScroll(deltaY);
        } 
        return true;
    }
    

    }
    调用伪代码
    public class XXFragment extends Fragment implements OnScrollChangedCallback{

    productWebView.setOnScrollChangedCallback(this);

        @Override
    public void onScroll(int deltaY) {
        // TODO Auto-generated method stub
        int y = s_view.getScrollY()+deltaY;
        s_view.smoothScrollTo(0, y);
    }   
    

    }

  4. 总结:
    比较蛋疼的解决方式,目前还没有发现更好的方式,有更好的处理方式望伙伴们告知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值