Имитирующий навигационный ящик приложения youtube/gmail

Фон

В последние месяцы Google выпустил приложение Youtube с навигационным ящиком (скользящее меню AKA).

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

функции:

  • нажмите, чтобы начать скольжение.

  • перемещение значка на кнопке "вверх" панели действий при переключении режимов.

  • область содержимого (область справа, а не меню) остается вместо прокрутки при перемещении меню.

  • панель действий остается вместо прокрутки.

  • область содержимого (область справа, а не само меню) изменяет свой цвет при прокрутке, а не в самом меню.

вот скриншоты, чтобы показать, о чем я говорю:

перед скольжением:

before

после скольжения:

after

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

проблема

и в официальной библиотеке, и в библиотеке slideMenu нет всех тех функций, которые объединены, например, в приложении YouTube.

например, официальная библиотека не обладает способностью № 1 (почему я опубликовал этот поток), поэтому вместо этого я использовал библиотеку slideMenu.

однако, в библиотеке slideMenu нет (или нет?) способности № 2 и № 3.

В обеих библиотеках недостаточно документации/примеров того, что можно сделать, поэтому очень сложно их использовать или добавить к ним новые функции.

что я пробовал

В настоящее время я использую библиотеку slideMenu, так что это мой код для подготовки slideMenu:

activity.setBehindContentView(slidingMenuRootView);
mSlidingMenu = activity.getSlidingMenu();
mSlidingMenu.setShadowWidthRes(R.dimen.slidingmenu_shadow_width);
mSlidingMenu.setShadowDrawable(R.drawable.slidingmenu_shadow);
mSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
mSlidingMenu.setFadeEnabled(true);
mSlidingMenu.setFadeDegree(1.0f);
mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
activity.setSlidingActionBarEnabled(false);

Вопрос

как я могу получить slideMenu (или навигационный ящик), чтобы действовать как на приложении youtube, то есть со всеми функциями, которые я назвал объединенными?


возможное решение

EDIT: используя menuDrawer library (github link здесь), я успешно достиг всех функций, о которых я упомянул. здесь пример кода:

public class ActionBarSherlockSample extends SherlockActivity {

    private MenuDrawer mDrawer;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar();
        mDrawer = MenuDrawer.attach(this, MenuDrawer.Type.OVERLAY);
        final TextView menuView = new TextView(this);
        menuView.setTextColor(0xFFFFFFFF);
        menuView.setText("As the drawer opens, the drawer indicator icon becomes smaller.");
        menuView.setGravity(Gravity.CENTER);
        mDrawer.setMenuView(menuView);
        mDrawer.setTouchMode(MenuDrawer.TOUCH_MODE_FULLSCREEN);
        mDrawer.setOnDrawerStateChangeListener(new OnDrawerStateChangeListener() {

            @Override
            public void onDrawerStateChange(final int oldState, final int newState) {
                Log.d("AppLog", "oldState:" + oldState + " newState:" + newState);
            }

            @Override
            public void onDrawerSlide(final float openRatio, final int offsetPixels) {
            }
        });
        final TextView contentView = new TextView(this);
        contentView
                .setText("This sample uses ActionBarSherlock to display an ActionBar on older platforms. The drawer indicator, "
                        + "as per the design guidelines, is visible in the top left corner.");
        contentView.setGravity(Gravity.CENTER);
        mDrawer.setContentView(contentView);
        mDrawer.setSlideDrawable(R.drawable.ic_drawer);
        mDrawer.setDrawerIndicatorEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(final MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            mDrawer.toggleMenu();
            break;
        }
        return super.onOptionsItemSelected(item);
    }
}

Ответ 1

Используйте MenuDrawer

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

Особенности:

  • Меню можно расположить по всем четырем краям.
  • Поддерживает прикрепление всегда видимого, неперетаскиваемого меню, которое полезно на планшетах.
  • Меню может обернуть как содержимое, так и все окно.
  • Позволяет открывать ящик, перетаскивая край, весь экран или вовсе.
  • Может использоваться в XML-макетах.
  • Индикатор, показывающий, какой экран в настоящее время виден.