【问题标题】:Override zoom over swipetorefresh - Android覆盖缩放 swipetorefresh - Android
【发布时间】:2025-12-16 01:25:01
【问题描述】:

好的,所以如果我滚动了一点并且滑动刷新变得可见,并且如果我尝试用两根手指缩放它只会进一步向下刷新。我想要实现的是,如果用户尝试缩放,则滑动刷新将被缩放选项覆盖。这是一些代码。

这是 webView 的简单缩放控件。

    myWebView.getSettings().setLoadWithOverviewMode(true);
    myWebView.getSettings().setUseWideViewPort(true);
    myWebView.getSettings().setBuiltInZoomControls(true);
    myWebView.getSettings().setDisplayZoomControls(false);

这里来自 SwipeToRefresh:

    mySwipeRefreshLayout.setOnRefreshListener(
         new SwipeRefreshLayout.OnRefreshListener() {
              @Override
              public void onRefresh() {
                   myWebView.reload();
                   }
         });

我有mySwipeRefreshLayout.setRefreshing(true);mySwipeRefreshLayout.setRefreshing(false);,这取决于我想在哪里使用它们。有什么建议吗?

【问题讨论】:

    标签: java android-studio webview pinchzoom swiperefreshlayout


    【解决方案1】:

    我遇到了同样的问题,我用下一个成功解决了:

    创建从 SwipeRefreshLayout 扩展的新类

    public class SwipeToRefresh extends SwipeRefreshLayout {
    
    private static final float REFRESH_RATE = 10f;
    private float mDownX, mDownY, scaleX, scaleY;
    
    public SwipeToRefresh(Context context) {
        super(context);
    }
    
    public SwipeToRefresh(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mDownX = ev.getX();
                mDownY = ev.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                return doRefresh(ev);
            case MotionEvent.ACTION_UP:
                return doRefresh(ev);
        }
        return super.onInterceptTouchEvent(ev);
    }
    
    private boolean doRefresh(MotionEvent ev) {
        scaleX = Math.abs(ev.getX() - mDownX);
        scaleY = Math.abs(ev.getY() - mDownY);
        if (scaleY / scaleX > REFRESH_RATE) {
            return super.onInterceptTouchEvent(ev);
        } else {
            return false;
        }
    }
    

    }

    活动中

      SwipeToRefresh mSwipeRefreshLayout = (SwipeToRefresh) findViewById(R.id.my_refresh_layout);
        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                // Refresh WebView
            }
        });
    

    不要忘记在布局中更改类名

    <com.example.package.SwipeToRefresh
            android:id="@+id/my_refresh_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <WebView
                android:id="@+id/webView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentStart="true" />
    
        </com.example.package.SwipeToRefresh>
    

    祝你好运!

    【讨论】:

    • 这是一个很大的改进,但捏缩放并不会覆盖滑动刷新。如果圆圈在屏幕上并且您尝试缩放它只是向上或向下移动。.跨度>
    • 好主意。谢谢:)