Android-стиль слайдов Android

Новое приложение Facebook и его навигация настолько классные. Я просто пытался понять, как его можно эмулировать в моем приложении.

Кто-нибудь знает, как это можно достичь?

enter image description here

При нажатии на верхнюю левую кнопку отображается слайд страницы и следующий экран:

enter image description here

Видео YouTube

Ответ 1

У меня была игра с этим сама, и лучшим способом, который я мог найти, было использование FrameLayout и создание пользовательского HorizontalScrollView (HSV) в верхней части меню. Внутри HSV представлены ваши приложения, но есть прозрачный вид в качестве первого ребенка. Это означает, что когда HSV имеет нулевое смещение прокрутки, меню будет отображаться (и по-прежнему будет неожиданно нажиматься).

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

Код находится здесь, а нижние две кнопки (называемые HorzScrollWithListMenu и HorzScrollWithImageMenu) в действии Launch показывают лучшие меню, которые я мог бы придумать:

демонстрационное меню для Android

Снимок экрана с эмулятора (средняя прокрутка):

Screenshot from emulator (mid-scroll)

Снимок экрана с устройства (полный прокрутка). Обратите внимание, что мой значок не так широк, как значок меню Facebook, поэтому представление меню и "приложение" не выровнены.

Screenshot from device (full-scroll)

Ответ 2

Я реализовал facebook-подобную навигацию в этом проекте библиотеки.

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

Внутри репо вы можете найти демонстрационный проект, как использовать lib для реализации facebook-подобной навигации. Вот короткое видео с записью демонстрационного проекта.

Также этот lib должен быть совместим с этим шаблоном ActionBar, потому что он основан на транзакциях операций и транзакциях TranslateAnimations (а не на фрагментах и ​​пользовательских представлениях).

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

Все самое лучшее,
Alex

Ответ 4

Я думаю, что приложение facebook не написано в собственном коде (с помощью собственного кода я имею в виду, используя макеты в Android), но они использовали webview для него и использовали некоторые библиотеки javascript ui, такие как sencha. Его можно легко достичь с помощью sencha framework.

enter image description here

Ответ 5

Вот еще одна (очень хорошая) библиотека с открытым исходным кодом!

Хорошей особенностью этого является то, что он легко интегрируется с ActionBarSherlock.

Здесь github ссылка проекта

Здесь ссылка Google Play

Ответ 6

Я только что реализовал аналогичный вид для своего собственного проекта. Вы можете проверить его здесь

Вот экран примера приложения на основе библиотеки, который я написал: ActionsContentView Example

Легко использовать это настраиваемое представление как элемент компоновки XML. Вот пример:

    <shared.ui.actionscontentview.ActionsContentView
      android:id="@+id/content"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:actions_layout="@layout/actions"
      app:content_layout="@layout/content" />

У меня возникнут вопросы об использовании библиотеки ActionsContentView. Я могу написать небольшую статью в проектах Wiki.

Некоторые преимущества этой библиотеки:

  • возможность слайд-шоу прикосновением
  • легко настроить размер панели действий в XML
  • поддержка всех версий Android SDK, начиная с версии 2.0 и выше

Существует одно ограничение:

  • все горизонтальные прокрутки не будут работать при границах этого представления

С уважением, Стивен

Ответ 8

Сделал обзор существующей реализации и превратил его в проект библиотеки плюс пример приложения. Также добавлен синтаксический анализ XML, а также автоматическое определение возможной панели действий, поэтому он работает как с нативной, так и с панелью действий поддержки, например с ActionBarSherlock.

Это также удаляет панель действий!

Все это проект библиотеки вместе с примером приложения и описывается в Скользящее меню для Android, например google и facebook apps, Благодаря scirocco для первоначальной идеи и кода!

SlideMenu on GingerbreadSlideMenu on ICS with ActionBar

Ответ 10

Я думаю, что библиотека не упомянула:

jfeinstein10/SlidingMenu

github url: https://github.com/jfeinstein10/SlidingMenu

  • отлично работает с панелью действий ActionBarSherlock, которая помогает в обратной совместимости!
  • Поддержка правого слайда и не только перемещение по кнопке!

Ответ 11

Не могу прокомментировать ответ, данный @Paul Grime, но в любом случае я представил в своем проекте github исправление проблемы мерцания....

Я отправлю исправление, возможно, кому-то это понадобится. Вам просто нужно добавить две строки кода. Первый под вызовом anim.setAnimationListener:

anim.setFillAfter(true);

И второй после вызова app.layout():

app.clearAnimation();

Надеюсь, что это поможет:)

Ответ 12

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

Если кому-то интересно, я могу очистить код/​​макет и отправить сообщение. Я знаю, что AbsoluteLayout устарел, но это была очень простая реализация. "Влево" / "Вправо", а когда "раздвигаться", просто сдвиньте левый вид со смещения -X на ширину устройства - все, что вы хотите показать в правом представлении

Ответ 13

Привет, это лучшее примерное демонстрационное приложение, которое предоставляет facebook как слайд меню. Проверьте код здесь

enter image description here

enter image description here

Ответ 14

В рамках моей общей библиотеки Android (ACL) я реализовал собственный SideBar. Основные преимущества:

  • Боковая панель может быть установлена ​​в любое положение: слева, сверху, снизу, справа
  • Оба основных вида и скользящего вида доступны для просмотра.
  • Боковая панель может быть частично показана
  • Стилируемые атрибуты для SideBar упрощают изменение стиля
  • Артефакт в maven repo
  • Часть большой библиотеки

Исходный код: https://github.com/serso/android-common/tree/master/views/src/main/java/org/solovyev/android/view/sidebar

Использование: https://github.com/serso/android-common/blob/master/samples/res/layout/acl_view_layout.xml

Ответ 15

Недавно я работал над моей версией реализации раздвижного меню. Он использует популярную библиотеку Android для Android. SlidingMenu.

Пожалуйста, проверьте исходный код в GitHub:

https://github.com/baruckis/Android-SlidingMenuImplementation

Загрузите приложение прямо на устройство, чтобы попробовать:

https://play.google.com/store/apps/details?id=com.baruckis.SlidingMenuImplementation

Код должен быть понятным из-за комментариев. Надеюсь, это будет полезно!;)

Ответ 16

Я нашел простейший способ для этого и его работу. Используйте простой ящик навигации и вызовите drawer.setdrawerListner() и используйте метод mainView.setX() в методе drawerSlide ниже или скопируйте мой код.

xml файл

 <android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000" >

<RelativeLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff">

  <ImageView
      android:layout_width="40dp"
      android:layout_height="40dp"
      android:id="@+id/menu"
      android:layout_alignParentTop="true"
      android:layout_alignParentLeft="true"
      android:layout_marginTop="10dp"
      android:layout_marginLeft="10dp"
      android:src="@drawable/black_line"
      />
</RelativeLayout>


<RelativeLayout
    android:id="@+id/left_drawer"
    android:layout_width="200dp"
    android:background="#181D21"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    >
    </RelativeLayout>
 </android.support.v4.widget.DrawerLayout>

java файл

   public class MainActivity extends AppCompatActivity {
DrawerLayout drawerLayout;
RelativeLayout mainView;
ImageView menu;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    menu=(ImageView)findViewById(R.id.menu);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mainView=(RelativeLayout)findViewById(R.id.content_frame);

    menu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            drawerLayout.openDrawer(Gravity.LEFT);
        }
    });

    drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            mainView.setX(slideOffset * 300);
        }

        @Override
        public void onDrawerOpened(View drawerView) {

        }

        @Override
        public void onDrawerClosed(View drawerView) {

        }

        @Override
        public void onDrawerStateChanged(int newState) {

        }
    });
 }
}

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

Спасибо

Ответ 17

Я собираюсь сделать некоторые смелые предположения здесь...

Я предполагаю, что у них есть макет, который представляет меню, которое не видно. Когда кнопка меню нажата, они оживляют макет/представление сверху, чтобы уйти с пути, и просто включите видимость макета меню. Я не думал об этом, вызывая какие-либо проблемы с z-индексом в представлениях или как они это контролируют.

Ответ 18

Вот руководство по разработке и разработке, которое содержится в официальной документации по Android, не нужно добавлять неофициальную внешнюю библиотеку. Будет работать только библиотека поддержки Android. Найдите ссылки здесь.

design и develop.

Ответ 19

Android-приложение Facebook возможно построено с помощью Fragments. Меню - это один фрагмент, глубина активности (Newsfeed/Events/Friends и т.д.) - это другой фрагмент. В основном планшет "мастер и детализация" на телефоне.

Ответ 20

Для информации, поскольку библиотека совместимости начинается с 1.6, и это приложение facebook также работает на устройствах с Android 1.5, это не может быть сделано с помощью фрагментов.

Как вы могли это сделать: Создайте "базовую" активность BaseMenuActivity, где вы поместите всю логику для onItemClickListener для своего списка меню и определите 2 анимации ( "открыть" и "закрыть" ). В конце/начале анимации вы показываете/скрываете макет BaseMenuActivity (разрешаете его menu_layout). Макет для этого действия прост, его единственный список с элементами + прозрачная часть справа от вашего списка. Эта часть будет кликабельна, а ее ширина будет такой же, как и ваша кнопка перемещения. При этом вы сможете щелкнуть этот макет, чтобы запустить анимацию, чтобы позволить content_layout скользить влево и снимать весь экран. Для каждого параметра (т.е. Пункта в списке меню) вы создаете "ContentActivity", который расширяет BaseMenuActivity. Затем, когда вы нажимаете на элемент списка, вы начинаете свой ItemSelectedContentActivity с видимым меню (которое вы закроете, как только начнется ваша активность). Макеты для каждого ContentActivity являются FrameLayout и включают в себя и. Вам просто нужно переместить content_layout и сделать menu_layout видимым, когда вы хотите.

Это способ сделать это, и я надеюсь, что я был достаточно ясным.

Ответ 21

Я играю с этим в последние несколько дней, и я придумал решение, которое довольно простое в конце, и которое работает с пре-Honeycomb. Мое решение состояло в том, чтобы оживить представление, которое я хочу воспроизвести (FrameLayout для меня), и прослушать конец анимации (в этот момент для смещения позиции "Влево/вправо" ). Я вставил свое решение здесь: Как оживить перевод View

Ответ 22

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

реализация боковой панели меню с помощью java-кода без XML

Ответ 23

Я не видел, как удивительный SimonVT/android-menudrawer упоминается где-либо в приведенных выше ответах. Итак, здесь ссылка

https://github.com/SimonVT/android-menudrawer

Его супер простота в использовании, и вы можете поместить его слева, справа, сверху или снизу. Очень хорошо документирован пример кода и лицензия Apache 2.0.

Ответ 24

Android добавила навигационный ящик. См. Это

ссылка