2016-03-21 21 views
0

私は、その中にTouchImageViewを備えたViewPagerを使用しています。これは素晴らしい機能です(私の多くのAndroidアプリでこのソリューションを使用しています)。 しかし私は同じ画面上に多くの他のコントロールがあるため、すべてがスクロールビューコントロール内にあるアプリを持っています。 このシナリオでは、スクロールビューがうまく再生されず、ズームした画像内でパンすることができないことがわかります。指を使って上下にパンすると、画像のパンではなくページ全体がスクロールします。スクロールビュー内で画像をズーム/パンする方法

これは私がやろうとしているものです.... TouchImageViewの中で私はズーム開始とズーム終了を検出し、自分のアクティビティ(ZoomBegin()とonZoomEnd()メソッドのコールバックを行うためのインターフェイスを作成しました。 onZoomBegin()メソッドでは、スクロールビューがすべてのタッチイベントに応答しないようにしたいのですが、onZoomEnd()では再び有効にできます。 は、これまでのところ、ここで

scrollView.setEnabled(false); 
scrollView.requestDisallowInterceptTouchEvent(true); 

も私が買収onTouchListenerようにした同様の質問への答えを試してみました....私が働いているなしのためonZoomBegin()メソッドでやって試してみましたものですこうした:

scrollView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return true; 
     } 
    }); 

これは、スクロールからscrollviewを停止していたがscrollviewはまだタッチイベントは、画像はまだ上下にパンしたりしません原因傍受されます。

レイアウトデザイナーで、レイアウトデザイナーでnestedScrollingEnabledを確認しようとしましたが、喜びはありません.... スクロールビューを完全に無効にして、タッチイベントに応答しないようにする方法はありますか?

答えて

0

別の質問でこの回答が見つかったのですが、それが私の問題(私の質問への回答)の解決策であることを認識した時点で、私はそれに言及しませんでした。私は見ていますので、私はこの投稿を編集して、クレジットを支払うべき場所にクレジットを与えることができます。

public class CustomScrollView extends ScrollView { 

// true if we can scroll the ScrollView 
// false if we cannot scroll 
private boolean scrollable = true; 

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

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

public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 


public void setScrollingEnabled(boolean scrollable) { 
    this.scrollable = scrollable; 
} 

public boolean isScrollable() { 
    return scrollable; 
} 

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      // if we can scroll pass the event to the superclass 
      if (scrollable) 
       return super.onTouchEvent(ev); 
      // only continue to handle the touch event if scrolling enabled 
      return false; // scrollable is always false at this point 
     default: 
      return super.onTouchEvent(ev); 
    } 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    // Don't do anything with intercepted touch events if 
    // we are not scrollable 
    if (!scrollable) 
     return false; 
    else 
     return super.onInterceptTouchEvent(ev); 
} 

}

私はズームが始まり、終了時に呼び出されるコールバックインタフェースを追加TouchImageViewでは、私は自分自身のために考え出したこの部分は....ので、私の活動に私が唯一しなければなりませんでしたこれは:

private class OnZoomListener implements TouchImageView.OnZoomListener { 
    @Override 
    public void onZoomBegin() { 
     isZoomed = true; 
     scrollView.scrollTo(0, 0); 
     scrollView.setScrollingEnabled(false); // <-- disables scrollview 
     hideImageControls(); 
     sizeViewPager(); 
    } 

    @Override 
    public void onZoomEnd() { 
     scrollView.setScrollingEnabled(true); // <-- enables scrollview 
     showImageControls(); 
     isZoomed = false; 
    } 
} 
+0

TouchImageView.javaクラスを投稿できますか?私は同じ問題に直面しているからです。 – Philliphe

関連する問題