的DrawerLayout默認的靈敏度是好的,但我想使它更容易一點做在屏幕上打開drawerlayout側面的左向右滑動的手勢。我發現它在平板電腦上很難實現,但在一些手機上也很難。DrawerLayout修改靈敏度?
我沒有看到網上API ..有沒有人見過的東西,將使我們能夠做到這一點的DrawerLayout頁面的任何姿勢或姿勢控制器參考?
的DrawerLayout默認的靈敏度是好的,但我想使它更容易一點做在屏幕上打開drawerlayout側面的左向右滑動的手勢。我發現它在平板電腦上很難實現,但在一些手機上也很難。DrawerLayout修改靈敏度?
我沒有看到網上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實例來處理拖動的事實。有兩個例子 - 一個用於左側抽屜,另一個用於右側抽屜。他們所得到的實例是這樣的:
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類內部實現變化脆弱。