2012-01-25 17 views
1

HorizontalScrollViewの中にSeekBarがあり、ハンドルをつかんで移動するのが非常に難しいです。ハンドルに正確に触れないと、HorizontalScrollViewはタッチイベントを受信して​​消費します。 SeekBarの優先度を上げる方法はありますか?それで、タッチイベントの通常の「範囲」があるのでしょうか、これはちょっとしたアイデアですか?私はそれを避けるべきですか?シークバーのタッチ優先度を上げる

答えて

0

私は以下のようにして、それを「解決」:

注:ここで説明したように私のスクロールレイアウトは、ロック可能です:https://stackoverflow.com/a/5763815/1067721(少し下の私の答えにatentionを支払う、私はそのビットがすることが判明し

public class InterceptFrameLayout extends FrameLayout { 

    private OnTouchListener mListener; 

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

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

    public InterceptFrameLayout(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public boolean onInterceptTouchEvent (MotionEvent ev) { 
     return onTouchEvent(ev); 
    } 

    @Override 
    public void setOnTouchListener (View.OnTouchListener l) { 
     mListener = l; 
    } 

    @Override 
    public boolean onTouchEvent (MotionEvent ev) { 
     if (mListener != null) { 
      return mListener.onTouch(this, ev); 
     } else { 
      return super.onTouchEvent(ev); 
     } 
    } 
} 

をそして、私のFragmentに、私はリスナーANを実装:私は、タッチイベントをインターセプトすることでframeLayoutで私のシークバーを包ん

)重要ですシークバーがイベントを消費してみましょうdは:ここで

volWrapper.setOnTouchListener(new OnTouchListener() {   
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: { 
        mHostingScroll.setScrollable(false); 
        break; 
       } 
       case MotionEvent.ACTION_UP: { 
        mHostingScroll.setScrollable(true); 
        break; 
       } 
      } 
      return volumeBar.onTouchEvent(event); 
     } 
    }); 
5

は、フレームのレイアウトを拡張せずにこの問題を解決するために、他の方法です。
アイデアは、SeekBarをタッチするときにHorizo​​ntalScrollViewのタッチイベントを無効にすることです。
だから、あなたは、例えばビューを初期化するとき、あなたはこのような何かを定義することができます:あなたはViewParentクラス上のドキュメントを読むことができます詳細については

protected void onCreate(final Bundle savedInstanceState) 
{ 

    [...] 

    final HorizontalScrollView scrollView = (HorizontalScrollView) findViewById(R.id.vo_cw_hsv); 
    final SeekBar opacitySeekBar = (SeekBar) findViewById(R.id.vo_cw_seekbar); 
    opacitySeekBar.setOnTouchListener(new OnTouchListener() 
    { 
     @Override 
     public boolean onTouch(final View view, final MotionEvent event) 
     { 
     if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) 

      scrollView.requestDisallowInterceptTouchEvent(true); 

     return false; 
     } 
    }); 

    [...] 

} 

http://developer.android.com/reference/android/view/ViewParent.html#requestDisallowInterceptTouchEvent(boolean)

+0

+1この問題に対する優れたソリューションを! –

+0

これはまさに私が欲しいWhtです – GOLDEE