java - 覆盖 swipetorrefresh 上的缩放 - Android

标签 java android-studio webview pinchzoom swiperefreshlayout

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

这是 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); 取决于我想在哪里使用它们。有什么建议吗?

最佳答案

我有同样的问题,我成功地用 next 解决了它:

创建从 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;
    }
}

Activity 中

  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>

祝你好运!

关于java - 覆盖 swipetorrefresh 上的缩放 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35957542/

相关文章:

java - MySQL (SELECT) 在 Java 中检索 null

java - 需要正则表达式匹配方面的帮助

android - 如何在Android Studio中成功编译NDK(C文件)?

windows-7 - Android Studio 0.8.14 windows 7 似乎不包含 SDK

android - 在适配器中使用 Webview

java - 如何获取语言环境的 iso2 语言代码?

java - 在 JSF 中,from-view-id 和 from-tree-id 之间有什么区别?

java - 新人 : Android Studio: Error:Execution failed for task ':app:processDebugManifest'

android webview 不加载移动版

ios - 像 Chrome ios 一样复制持久/快速滚动