Как сделать ActionBar как Google Play, который исчезает при прокрутке

Как сделать прозрачный или полупрозрачный ActionBar, такой как Google Play, который исчезает или исчезает при прокрутке с помощью windowActionBarOverlay ?

Проверьте следующие снимки экрана

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

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

Вам нужно будет использовать функцию OnScrollChanged в ScrollView . ActionBar не позволяет вам установить непрозрачность, поэтому установите фоновый рисунок на панели действий, и вы можете изменить его непрозрачность на основе количества прокрутки в scrollview. Я привел пример рабочего процесса

Набор функций дает соответствующую альфу для местоположения locationImage на основе его окна WRT позиции.

this.getScrollY() дает вам прокрутку scrollView

 public void OnScrollChanged(int l, int t, int oldl, int oldt) { // Code ... locationImage.setAlpha(getAlphaForView(locationImageInitialLocation- this.getScrollY())); } private float getAlphaForView(int position) { int diff = 0; float minAlpha = 0.4f, maxAlpha = 1.f; float alpha = minAlpha; // min alpha if (position > screenHeight) alpha = minAlpha; else if (position + locationImageHeight < screenHeight) alpha = maxAlpha; else { diff = screenHeight - position; alpha += ((diff * 1f) / locationImageHeight)* (maxAlpha - minAlpha); // 1f and 0.4f are maximum and min // alpha // this will return a number betn 0f and 0.6f } // System.out.println(alpha+" "+screenHeight +" "+locationImageInitialLocation+" "+position+" "+diff); return alpha; } 

EDIT: Я добавил пример рабочего примера на https://github.com/ramanadv/fadingActionBar , вы можете посмотреть на него.

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

Пожалуйста, проверьте эту библиотеку https://github.com/ManuelPeinado/FadingActionBar, которая реализует эффект эффекта эффектного эффекта выцветания, который вы хотите

Эта библиотека помогает для анимации https://github.com/ksoichiro/Android-ObservableScrollView

Официальная документация Google DeveloperDocumentation

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

Панель действий в режиме наложения.

Включить режим наложения

Чтобы включить режим наложения для панели действий, вам необходимо создать настраиваемую тему, которая расширяет существующую тему панели действий и устанавливает для свойства android: windowActionBarOverlay значение true.

Только для Android 3.0 и выше

Если для вашего minSdkVersion установлено значение 11 или выше, ваша пользовательская тема должна использовать тему Theme.Holo (или один из ее потомков) в качестве родительской темы. Например:

 <resources> <!-- the theme applied to the application or activity --> <style name="CustomActionBarTheme" parent="@android:style/Theme.Holo"> <item name="android:windowActionBarOverlay">true</item> </style> </resources> 

Для Android 2.1 и выше

Если ваше приложение использует библиотеку поддержки для совместимости на устройствах с версиями ниже Android 3.0, ваша пользовательская тема должна использовать тему Theme.AppCompat (или один из ее потомков) в качестве родительской темы. Например:

 <resources> <!-- the theme applied to the application or activity --> <style name="CustomActionBarTheme" parent="@android:style/Theme.AppCompat"> <item name="android:windowActionBarOverlay">true</item> <!-- Support library compatibility --> <item name="windowActionBarOverlay">true</item> </style> </resources> 

Укажите верхний край макета

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

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="?android:attr/actionBarSize"> ... </RelativeLayout> 

Существует официальная документация о том, как добиться этого эффекта: https://developer.android.com/training/basics/actionbar/overlaying.html

Edit: Существует библиотека с открытым исходным кодом ObservableScrollView с большим количеством демонстраций с открытым исходным кодом с различными эффектами ActionBar, включая те, которые вы упомянули. Это отличный ресурс: https://github.com/ksoichiro/Android-ObservableScrollView .

Используя прослушиватель прокрутки AbsListView, мы можем достичь для списка просто без использования другой сложной библиотеки или ScrollView

Установить прослушиватель прокрутки в список

 public class PagedScrollListener implements AbsListView.OnScrollListener { private ActionBar mActionBar; private View mTopHideView; // represent header view @Override public void onScrollStateChanged(final AbsListView view, final int scrollState) { mScrollState = scrollState; } @Override public void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount, final int totalItemCount) { if (mActionBar != null && mTopHideView != null && mListView != null) { Log.i(TAG, getScrollY() + ""); int currentY = getScrollY(); final int headerHeight = mTopHideView.getHeight() - mActionBar.getHeight(); final float ratio = (float) Math.min(Math.max(currentY, 0), headerHeight) / headerHeight; final int newAlpha = (int) (ratio * 255); Log.i(TAG, newAlpha + " alpha"); mActionBarDrawaqble.setAlpha(newAlpha); }} public void setActionBarRefernce(ActionBar actionBar, View topHideView, float actionBarHeight, ListView listView) { mActionBar = actionBar; mActionBarHeight = actionBarHeight; mTopHideView = topHideView; mListView = listView; mActionBarDrawaqble = new ColorDrawable(ContextCompat.getColor(mContext, R.color.google_plus_red)); mActionBar.setBackgroundDrawable(mActionBarDrawaqble); mActionBarDrawaqble.setAlpha(0); } public int getScrollY() { View c = mListView.getChildAt(0); if (c == null) { return 0; } int firstVisiblePosition = mListView.getFirstVisiblePosition(); int top = c.getTop(); int headerHeight = 0; if (firstVisiblePosition >= 1) { headerHeight = mTopHideView.getHeight(); } return -top + firstVisiblePosition * c.getHeight() + headerHeight; } } 

// Примечание. Не забудьте вызвать ** setActionBarRefernce метод ** пользовательского прослушивателя

Если вы используете координаторLayout в своем макете xml, вы должны проверить эту статью, описывая, как обрабатывать свитки и реагировать на другие взгляды.

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

В webView:

 @JavascriptInterface public void showToolbar(String scrollY, String imgWidth) { int int_scrollY = Integer.valueOf(scrollY); int int_imgWidth = Integer.valueOf(imgWidth); String clr; if (int_scrollY<=int_imgWidth-actionBarHeight) { clr = Integer.toHexString(int_scrollY * 255 / (int_imgWidth-actionBarHeight)); }else{ clr = Integer.toHexString(255); } toolbar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#"+clr+"9CCC65"))); } 
Intereting Posts
ArrayList <HashMap <String, String >> to String Отменить все аварийные сигналы, установленные с помощью будильника Андроида студия 1.2 град очень медленная Использовать антивирус в приложении для сканирования файлов Поворот изображения по часовой стрелке с помощью LibGDX Фоновая телефонная связь и взаимосвязь между жизненными циклами Activity, Process и Service Анонимный идентификатор пользователя Parse не сохраняется на Android Не удалось создать уведомление: недопустимый конструктор Программа Android для преобразования базы данных SQLite в Excel Тестирование Android в рамках проекта Вставьте SD-карту перед использованием камеры Alert. Android-эмулятор? Как показать окно редактирования текста над экраном? Android Junit Testing против стандартного тестирования Junit Как вы исправляете обновление Android Studio (0,80 -> 0,81)? Примените много цветных фильтров к одному и тому же извлекаемому