DrawerLayoutのデフォルトの感度は問題ありませんが、画面の横にある左から右のスライドジェスチャーを使用してdrawerlayoutを開く方が少し簡単です。私はそれがタブレットでは難しいと感じているだけでなく、いくつかの携帯電話では難しいと感じています。DrawerLayoutは感度を変更しますか?
Web APIのDrawerLayoutページでジェスチャーまたはジェスチャーコントローラーの参照が表示されません。これを可能にする何かを見た人はいますか?
DrawerLayoutのデフォルトの感度は問題ありませんが、画面の横にある左から右のスライドジェスチャーを使用してdrawerlayoutを開く方が少し簡単です。私はそれがタブレットでは難しいと感じているだけでなく、いくつかの携帯電話では難しいと感じています。DrawerLayoutは感度を変更しますか?
Web APIのDrawerLayoutページでジェスチャーまたはジェスチャーコントローラーの参照が表示されません。これを可能にする何かを見た人はいますか?
シンプルなジェスチャーの例:サークルで2つの画像を上に置くようにして、別のレイヤーにジャンプするときにもう一度押すと、再び元のサークルを押して再びジャンプします。あるアクティビティから別のアクティビティへジャンプしてみてください。前のアクティビティを終了したい場合は、次のアクティビティを呼び出すと、前のアクティビティを.finish()で閉じます。
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 ..
}
mLeftDragger
とmRightDragger
の両方が民間分野であり、ViewDragHelper
でmFieldSize
フィールドもプライベートです。クライアントコードでこれらのフィールドを設定できるパブリックメソッドはありません。そのため、ViewDragHelperクラスとDrawerLayoutクラスの内部実装の変更に対して脆弱なリフレクションに依存します。