2015-09-03 21 views
15

'da dokunma olayı varsa, ViewPager tarafından durdurulmasını durdurun Fragments sayfalarını görüntüleyen bir ViewPager var. Her Fragman bir çevrimdışı web sitesi görüntüleyen bir Web Görünümüdür. Bu web görüntülemelerinden bazıları, çalışmasını sağlamak için javascript kaydırma olayları içeriyor.Dokunma olayı, web görüntüleme

Web görünümünde herhangi bir kaydırma olayı (javascript dahilinde) yoksa, dokunma olayı, web görünümünde tüketilmiyorsa, ViewPager'a iletilir.

I

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) 
{ 
    return (this.swipeable) ? super.onInterceptTouchEvent(event) : false; 
} 

Ancak bu (beklendiği gibi) Kaydırılabilir olmaktan ViewPager önlenir, ama aynı zamanda web görünümünü ulaşan manyetik etkinliği durdurulmuş ViewPagers geçersiz denedi, bu yüzden iki istenmeyen etkilerini göstermektedir.

Dokunma olayını web'de ilk olarak görüntülemenin herhangi bir yolu var mı, daha sonra ViewPager numaralı iletiye geri gönderen parçada tüketilmezse?

public class MyViewPager extends ViewPager implements GestureDetector.OnGestureListener 
{ 
private static final String TAG = MyViewPager.class.getSimpleName(); 
private boolean swipeable = true; 
private float lastX = 0; 
private long lastTime = 0 ; 
private GestureDetector mGestureDetector; 
private boolean mScrolling = false; 

public MyViewPager(Context context) { 
    super(context); 
    mGestureDetector = new GestureDetector(context, this); 
} 

public MyViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    mGestureDetector = new GestureDetector(context, this); 
} 

public void setSwipeable(boolean swipeable) { 
    this.swipeable = swipeable; 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) 
{ 

    /* float speed = 0; 
    if(event.getAction() == MotionEvent.ACTION_MOVE) 
    { 
     if(lastX!=0) { 
      speed = (event.getRawX()- lastX)/(System.currentTimeMillis()-lastTime); 
      if(speed < 0.0){speed *=-1;} 
      Log.e(TAG, "Move at speed ->"+speed); 
      if(speed >0.5){return false;} 
     } 
     lastX = event.getRawX(); 
     lastTime = System.currentTimeMillis(); 
     return true; 
    }*/ 
    // return true; 

    return (this.swipeable) ? super.onInterceptTouchEvent(event) : false; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) 
{ 
    Log.i(TAG, "onTouch event"); 
    // mGestureDetector.onTouchEvent(event); 
    return false; 
} 
@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velX, float velY) { 
    Log.i(TAG, "flinging"); 
    return false; 
} 

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distX, float distY) 
{ 
    float displacement = distX; 
    return false; 
} 

// Unused Gesture Detector functions below 

@Override 
public boolean onDown(MotionEvent event) { 
    return false; 
} 

@Override 
public void onLongPress(MotionEvent event) { 
    // we don't want to do anything on a long press, though you should probably feed this to the page being long-pressed. 
} 

@Override 
public void onShowPress(MotionEvent event) { 
    // we don't want to show any visual feedback 
} 

@Override 
public boolean onSingleTapUp(MotionEvent event) { 
    // we don't want to snap to the next page on a tap so ignore this 
    return false; 
} 

}

cevap

8

Ben iki çözüm Bu sorunun artık var bir ViewPager sınıfını uzanan ve baskın oldu tarih: Benim MyViewPager bir hata yapmış durumda

ben kodu var

public boolean onInterceptTouchEvent(MotionEvent event) 
{ 
    // code 
} 

ancak çok daha iyi bir çözüm

geçersiz kılmak oldu Burada şeyiyle

bütün sınıf

public class ZoltansViewPager extends ViewPager { 

private static final String TAG = ZoltansViewPager.class.getSimpleName(); 
private boolean swipeable = true; 
private float lastX = 0; 
private long lastTime = 0 ; 
private GestureDetector mGestureDetector; 
private boolean mScrolling = false; 


public ZoltansViewPager(Context context) { 
    super(context); 
} 

public ZoltansViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 


public void setSwipeable(boolean swipeable) { 
    this.swipeable = swipeable; 
} 

@Override 
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 
    Log.i(TAG , " boolean checkV ->"+checkV + ", int dx-> "+dx+", int x->"+x+", int y->"+y); 
    if(x <300 || x >1700){return true;} 
    return false; 
} 
} 

o

başkası yardımcı olur umarım olduğunu
İlgili konular