在 swipetorefresh 上覆盖缩放 - Android [英] Override zoom over swipetorefresh - Android

查看:30
本文介绍了在 swipetorefresh 上覆盖缩放 - Android的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Okay so if I have scrolled just a little bit and the swipetorefresh gets visible, and if I try to zoom with two fingers it just gets further down to refresh. What I want to achieve is that if the user tries to zoom, the swipe to refresh to be overridden by the zoom option. Here is some code.

这是 webView 简单的缩放控件.

This is the webView simple zoom controls.

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

这里来自 SwipeToRefresh:

Here is from the SwipeToRefresh:

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

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

And I have mySwipeRefreshLayout.setRefreshing(true); and mySwipeRefreshLayout.setRefreshing(false); depending where I want to use them. Any suggestions?

推荐答案

我遇到了同样的问题,我通过 next 成功解决了它:

I had the same issue and I successfully solved it with next:

创建从 SwipeRefreshLayout 扩展的新类

Create new class extended from 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
        }
    });

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

Donn't forget change class name in layout

<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>

祝你好运!

这篇关于在 swipetorefresh 上覆盖缩放 - Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆