2011-11-15 11 views
14

私のアプリでPDFページを表示するためにアンドロイド互換パッケージバージョン4を使用しています。 私はPagerAdapter & ViewPagerを使って、水平スクロールビューのようなpdfページを表示しました。AndroidのViewPagerでページングを無効にして有効にする

問題がページングに関連しています。このスレッドandroid: ViewPager and HorizontalScrollVIewに従ってビューページ内の子を検出することでページングを停止できますが、ユーザーがそのビューの外に触れたときにどうすれば有効にすることができますか?私はCustomViewPagerに次のコードを使用しました。

public class CustomViewPager extends ViewPager { 

     private boolean enabled; 
     private int childId; 

     public CustomViewPager(Context context, AttributeSet attrs) { 
      super(context, attrs); 
      this.enabled = true; 
     } 

     public void setChildId(int childId) { 
      this.childId = childId; 
     } 

     @Override 
     public boolean onInterceptTouchEvent(MotionEvent event) { 
      boolean result = false; 
      View scroll = getChildAt(childId); 
      if (scroll != null) { 
       Rect rect = new Rect(); 
       CommonLogic.logMessage("PDF Page Rectangle ", TAG, Log.VERBOSE); 
       scroll.getHitRect(rect); 
       if (rect.contains((int) event.getX(), (int) event.getY())) { 
        setPagingEnabled(false); 
        result = true; 
       } 
      } 
      return result; 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
      if (this.enabled) { 
       return super.onTouchEvent(event); 
      } 
      return false; 
     } 

     public void setPagingEnabled(boolean enabled) { 
      this.enabled = enabled; 
     } 
    } 

if(scroll!=null)は両方の向きで真になっていることも、その後、PDFページの外に触れてみてください。

ViewPagerでページングが続行されるように、どのようにしてそれを元に戻すことができますか。

+1

にthis.enableのと設定されたデフォルト値「this.enableを返す」ためには、あなたがこれをしようと試みておいてください。http://stackoverflow.com/a/2655740/969325 – Warpzit

答えて

3

私はズームするピンチを必要とページングの画像ファイルと同様の問題を抱えていました。画像を拡大表示するときにページングを無効にし、画像全体が表示されているときにページングを有効にする方法が必要です。私はこれのようにそれを解決し、同様のことをすることができると思う。 まず拡張:クラスMyViewPagerはViewPager {...} を拡張し、2つの方法

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (YOUR_CRITERIA_TOENABLE_DISABLE) { 
     return true; 

    } else { 
     return super.onTouchEvent(event); 
    } 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    return super.onInterceptTouchEvent(event); 
} 

を以下のそのクラスのオーバーライドにコードからXMLレイアウトや動的な作成にビューのページャを使用してください。

0

falseに設定していますが、trueに戻すことはできません。また、あなたの傍受タッチロジックはちょっと奇妙に思えます...ページャを傍受させる唯一の時間は、ページングを有効にしたときに偽に設定されたときです(onTouchEvent()で処理されます)。どうやって?

@Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
     boolean result = true; 
     View scroll = getChildAt(childId); 
     if (scroll != null) { 
      Rect rect = new Rect(); 
      CommonLogic.logMessage("PDF Page Rectangle ", TAG, Log.VERBOSE); 
      scroll.getHitRect(rect); 
      if (rect.contains((int) event.getX(), (int) event.getY())) { 
       setPagingEnabled(false); 
       result = false; 
      } else { 
       setPagingEnabled(true); 
      } 
     } 
     return result; 
    } 
1
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (this.enabled) { 
      return super.onTouchEvent(event); 
    } 
    return false; 
} 

public void setPagingEnabled(boolean enabled) { 
    this.enabled = enabled; 
} 

置き換える「falseを返す」偽

関連する問題