2013-07-30 13 views
12

DrawerLayoutのデフォルトの感度は問題ありませんが、画面の横にある左から右のスライドジェスチャーを使用してdrawerlayoutを開く方が少し簡単です。私はそれがタブレットでは難しいと感じているだけでなく、いくつかの携帯電話では難しいと感じています。DrawerLayoutは感度を変更しますか?

Web APIのDrawerLayoutページでジェスチャーまたはジェスチャーコントローラーの参照が表示されません。これを可能にする何かを見た人はいますか?

答えて

-1

シンプルなジェスチャーの例:サークルで2つの画像を上に置くようにして、別のレイヤーにジャンプするときにもう一度押すと、再び元のサークルを押して再びジャンプします。あるアクティビティから別のアクティビティへジャンプしてみてください。前のアクティビティを終了したい場合は、次のアクティビティを呼び出すと、前のアクティビティを.finish()で閉じます。

0

android.support.v4.widget.DrawerLayout私は、スライディングジェスチャー(ストローク)を開始できる領域を広げることができるハックを思いついたので、スライドジェスチャーが簡単になりました。

ハック実装:

// assuming mDrawerLayout is an instance of android.support.v4.widget.DrawerLayout 
    try { 

     // get dragger responsible for the dragging of the left drawer 
     Field draggerField = DrawerLayout.class.getDeclaredField("mLeftDragger"); 
     draggerField.setAccessible(true); 
     ViewDragHelper vdh = (ViewDragHelper)draggerField.get(mDrawerLayout); 

     // get access to the private field which defines 
     // how far from the edge dragging can start 
     Field edgeSizeField = ViewDragHelper.class.getDeclaredField("mEdgeSize"); 
     edgeSizeField.setAccessible(true); 

     // increase the edge size - while x2 should be good enough, 
     // try bigger values to easily see the difference 
     int origEdgeSize = (int)edgeSizeField.get(vdh); 
     int newEdgeSize = (int) (origEdgeSize * 2); 
     edgeSizeField.setInt(vdh, newEdgeSize); 

    } catch (Exception e) { 
     // we unexpectedly failed - e.g. if internal implementation of 
     // either ViewDragHelper or DrawerLayout changed 
    } 

説明:ハックはDrawerLayoutクラスがドラッグを処理するためにViewDragHelperのインスタンスに依存しているという事実に基づいている

。 2つのインスタンスがあります.1つは左の引き出し用、もう1つは右の引き出し用です。彼らはこのようにインスタンス化取得されています

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

    ... code omitted for brevity .. 

    mLeftDragger = ViewDragHelper.create(this, TOUCH_SLOP_SENSITIVITY, mLeftCallback); 
    mLeftDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT); 
    mLeftDragger.setMinVelocity(minVel); 
    mLeftCallback.setDragger(mLeftDragger); 

    mRightDragger = ViewDragHelper.create(this, TOUCH_SLOP_SENSITIVITY, mRightCallback); 
    mRightDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_RIGHT); 
    mRightDragger.setMinVelocity(minVel); 
    mRightCallback.setDragger(mRightDragger); 

    ... code omitted for brevity .. 
} 

mLeftDraggermRightDraggerの両方が民間分野であり、ViewDragHelpermFieldSizeフィールドもプライベートです。クライアントコードでこれらのフィールドを設定できるパブリックメソッドはありません。そのため、ViewDragHelperクラスとDrawerLayoutクラスの内部実装の変更に対して脆弱なリフレクションに依存します。

ボーナス:
A comprehensive tutorial on ViewDragHelper usage

関連する問題