2016-03-12 2 views
2

Ok donc si j'ai défilé juste un petit peu et que le swipetorefresh devient visible, et si j'essaye de zoomer avec deux doigts ça descend juste plus bas pour rafraîchir. Ce que je veux réaliser, c'est que si l'utilisateur essaie de zoomer, le balayage à rafraîchir sera remplacé par l'option de zoom. Voici du code.Override zoom over swipetorefresh - Android

Voici les commandes de zoom WebView simples.

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

Voici le SwipeToRefresh:

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

Et je mySwipeRefreshLayout.setRefreshing(true); et mySwipeRefreshLayout.setRefreshing(false); selon l'endroit où je veux les utiliser. Aucune suggestion?

Répondre

0

J'ai eu le même problème et je l'ai résolu avec succès avec la prochaine:

Créer nouvelle classe étendue de 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; 
    } 
} 

}

Dans l'activité

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

Donn » t oublier de changer le nom de la classe dans la mise en page

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

Bonne chance!

+0

C'est une grosse amélioration mais toujours le pincement à zoom ne remplace pas le balayage pour rafraîchir .. Si le cercle est sur l'écran et que vous essayez de zoomer, il monte ou descend juste .. – Chunrand