Как реализовать DrawerLayout с видимой ручкой

Я успешно применил NavigationDrawer для своего приложения.

В моем приложении отображается ящик, который открывается в левой части экрана.

Моя проблема в том, что мне нужно добавить кнопку слева. Эту кнопку можно щелкнуть или щелкнуть, чтобы открыть левый ящик. Это я могу сделать.

Но кнопка должна выглядеть так, будто она является частью выдвижного ящика, который переполняется на экран.

Это означает, что кнопка должна скользить одновременно, когда ящик открывается и закрывается.

ЗАКРЫТОЕ СОСТОЯНИЕ:

Введите описание изображения здесь

ОТКРЫТИЕ ГОСУДАРСТВА

Введите описание изображения здесь

Я попытался добавить кнопку в макет левого ящика, но кажется, что вы не можете заставить вещи появляться за пределами ее границ, и ящик всегда будет полностью скрыт, когда вы его закроете.

Теперь я пытаюсь добавить его, чтобы добавить кнопку в основной DrawerLayout и сделать ее выровненной справа от левого ящика … Но не повезло … Похоже, что DrawerLayout не может иметь более двух детей. ,

Любая помощь будет оценена по достоинству.

Я использую библиотеку поддержки (v4)

[EDIT] И я поддерживаю уровень API 8 … Поэтому не могу использовать ImageView.setTranslationX или View.OnAttachStateChangeListener

Это довольно сложно.

Я думаю, что это похоже на то, что сделано с дескриптором ящика в новом приложении Google Maps. Не верьте мне на слово, не уверен. 🙂

Я написал переключатель, который остается на краю представления содержимого Activity . Когда DrawerLayout перетаскивается, я переводил представление по оси x на количество минимального дочернего DrawerLayout (которое представляет DrawerLayout содержимого DrawerLayout ) минус тень (если есть). Поскольку DrawerLayout тень + контентный вид DrawerLayout дает полную измеренную ширину всего ящика.

Я быстро умножаю скользящее смещение и минимальный ребенок и нахожу x-перевод.

[Изменить: код был удален для удобства чтения и был перенесен на ссылку, приведенную ниже]

В вашей деятельности:

 mDrawerToggle = new DrawerLayoutEdgeToggle( this, mDrawerLayout, R.drawable.ic_launcher, R.drawable.ic_launcher, Gravity.LEFT, true) { @Override public void onDrawerClosed(View view) { super.onDrawerClosed(view); //must call super } @Override public void onDrawerOpened(View view) { super.onDrawerOpened(view); //must call super } @Override public void onDrawerSlide(View view, float slideOffset) { super.onDrawerSlide(view, slideOffset); //must call super } }; mDrawerLayout.setDrawerListener(mDrawerToggle); 

Креативность: вы можете добавить больше косметики, например, расстояние от ActionBar, которое вы можете установить в качестве поля для дескриптора.

Также вы можете подражать «эффекту одиночной молнии», перемещая рукоятку вверх / вниз по левому краю или справа, просто переведя на ось Y. 🙂

Изменить: его доступно на моем GitHub здесь

Изменить 2 : для тех, кто не может получить дескриптор в начале, просто используйте mDrawerToggle.setVerticalPostionOffset(0)

Я нашел способ сделать это довольно легко благодаря библиотеке Aniqroid, написанной Mobistry (SO pseudo)

Я использую класс SlidingTray, который является копией android SlidingDrawer, но позволяет размещать ящик в любом углу экрана.

Я объявил элемент через xml

 <com.sileria.android.view.SlidingTray xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer" android:layout_width="match_parent" android:layout_height="270dp" android:content="@+id/content" android:handle="@+id/handle" > <ImageView android:id="@+id/handle" android:layout_width="320dp" android:layout_height="24dp" android:background="@drawable/tray_btn" /> <LinearLayout android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="fill_vertical" android:orientation="vertical" > </LinearLayout> </com.sileria.android.view.SlidingTray> 

И просто нужно было позвонить

 Kit.init(this); 

В моей основной Activity до раздувания макета.

Я благодарю разработчиков aniqroid!

https://code.google.com/p/aniqroid/

Intereting Posts
Android-эмулятор полностью разрядился – запуск команды управления telnet, сбой эмулятора Вставлять и удалять фрагменты в viewpager правильно Android Threading: этот класс обработчика должен быть статическим или может возникнуть утечка Как получить содержимое веб-сайта и поместить его так, как мы хотим, в макет приложения для Android? Как вызвать нестатический метод из статического метода Сжимайте видео, как whatsapp Есть ли простой способ добавить последнюю измененную метку времени при использовании ORMLite и Android? Есть ли такая функция, как метод onFirstFix в Android-картах Api V2? Действия не найдены для обработки Intent {act = android.intent.action.EDIT typ = vnd.android.cursor.item / event Ffmpeg Build Output не отображается? TabLayout задает интервалы или поля для каждой вкладки Как импортировать зависимость Maven в Android Studio / IntelliJ? HonyComb и DefaultHttpClient POJO, созданные jsonschema2pojo, имеют аннотацию, которую Android Studio не понимает Как запустить контекстную панель действий для текстового просмотра программно с копиями опций по умолчанию и выбрать все?