覆盖swipetorefresh上的缩放 - Android

时间:2016-03-12 12:18:03

标签: 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);取决于我想要使用它们的位置。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

创建从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>
祝你好运!