Подтвердить что ты не робот

Внедрение Gmail Tablet, как навигационный ящик

Я изучал планшетный дизайн приложения Gmail. В этом Navigation Drawer реализация отличается от других. Я приложил изображение для вашей справки.

enter image description here

А также, когда я разворачиваю ящик, это должно происходить как нормальное поведение навигационного ящика.

enter image description here

Я хотел бы реализовать так же. Я искал, но нашел только ссылку . Это не так полезно. Может ли кто-нибудь дать мне предложения, как я могу это сделать!

4b9b3361

Ответ 1

Вы можете использовать SlidingPaneLayout с пометкой на главной панели и пользовательским прослушивателем для перекрестного замирания.

<com.sqisland.android.CrossFadeSlidingPaneLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/sliding_pane_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  <FrameLayout
      android:layout_width="240dp"
      android:layout_height="match_parent"
      android:background="@color/purple">
  <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:text="@string/full"/>
  <TextView
      android:layout_width="64dp"
      android:layout_height="match_parent"
      android:background="@color/blue"
      android:text="@string/partial"/>
  </FrameLayout>
  <TextView
      android:layout_width="400dp"
      android:layout_height="match_parent"
      android:layout_weight="1"
      android:layout_marginLeft="64dp"
      android:background="@color/light_blue"
      android:text="@string/pane_2"/>
</com.sqisland.android.CrossFadeSlidingPaneLayout>

Подкласс SlidingPaneLayout и найдите частичное и полное панорамы в onFinishInflate:

protected void onFinishInflate() {
  super.onFinishInflate();

  if (getChildCount() < 1) {
    return;
  }

  View panel = getChildAt(0);
  if (!(panel instanceof ViewGroup)) {
    return;
  }

  ViewGroup viewGroup = (ViewGroup) panel;
  if (viewGroup.getChildCount() != 2) {
    return;
  }
  fullView = viewGroup.getChildAt(0);
  partialView = viewGroup.getChildAt(1);

  super.setPanelSlideListener(crossFadeListener);
}

Измените альфа полного поля и частичной панели на слушателя:

private SimplePanelSlideListener crossFadeListener 
    = new SimplePanelSlideListener() {
  public void onPanelSlide(View panel, float slideOffset) {
    super.onPanelSlide(panel, slideOffset);
    if (partialView == null || fullView == null) {
      return;
    }

    partialView.setVisibility(isOpen() ? View.GONE : VISIBLE);
    partialView.setAlpha(1 - slideOffset);
    fullView.setAlpha(slideOffset);
  }
};

Также, скройте частичную панель при открытии макета.

protected void onLayout(
    boolean changed, int l, int t, int r, int b) {
  super.onLayout(changed, l, t, r, b);

  if (partialView != null) {
    partialView.setVisibility(isOpen() ? View.GONE : VISIBLE);
  }
}

Дополнительная информация: http://blog.sqisland.com/2015/01/partial-slidingpanelayout.html