Intereting Posts
Кэш зависимостей Android Gradle может быть поврежден и не работает. Справочные ресурсы из другого модуля в Android Studio Как программировать короткий звуковой сигнал на громкоговорителе телефона Android Android DDMS уже установлена, поэтому будет выполнено обновление Как я должен обрабатывать связь между потоками AI и основным циклом игры? Как получить текущее местоположение и время исходящего вызова (точное время вызова)? В чем разница между getSupportFragmentManager () и getChildFragmentManager ()? Динамическое применение стиля к представлениям в Java-коде Изменить значки строки состояния оттенка Как реализовать facebook как реакция всплывающих анимаций в Android? Жизненный цикл активности Android – для чего все эти методы? Ошибка Android WindowManager: DispatchAttachedToWindow не вызывается Qt Android bluetooth socket проблемы с записью на Android 5.1.1 и 6.0 Не удалось получить настройки из аварийных сообщений Диалог загрузки веб-виджета Android

ImageView покрывает эффект пульсации кнопки наложения

У меня есть ImageView, выступающий в качестве фона Relativelayout с кнопкой обновления, расположенной поверх него. Эффект пульсации кнопки покрывается ImageView под ним. Я пробовал FrameLayouts и т. Д., Но ничего не помогает.

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/nav_drawer" android:layout_width="315dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="@color/sidebar_bg_color" android:orientation="vertical"> <ImageView android:id="@+id/imageView4" android:layout_width="fill_parent" android:layout_height="165dp" android:layout_alignParentTop="true" android:src="@drawable/device_bg" /> <LinearLayout android:layout_width="48dp" android:layout_height="48dp" android:layout_alignParentEnd="true" android:layout_alignParentTop="true" android:background="?android:attr/selectableItemBackgroundBorderless" android:clickable="true" android:focusable="true" android:gravity="center" android:orientation="vertical"> <ImageView android:id="@+id/imageView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/sidebar_refresh" /> </LinearLayout> </RelativeLayout> 

С помощью selectableItemBackgroundBorderless вы можете сделать так:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/nav_drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" android:background="@android:color/holo_green_light" android:orientation="vertical"> <ImageView android:id="@+id/imageView4" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:scaleType="fitXY" android:src="@drawable/device_bg" /> <ImageView android:layout_width="48dp" android:layout_height="48dp" android:layout_alignParentEnd="true" android:layout_alignParentTop="true" android:src="@drawable/sidebar_refresh" /> <LinearLayout android:layout_width="48dp" android:layout_height="48dp" android:layout_alignParentEnd="true" android:layout_alignParentTop="true"> <FrameLayout android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" android:padding="7dp" android:background="@android:color/transparent"> <ImageView android:id="@+id/imageView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="true" android:src="@drawable/sidebar_refresh" android:alpha="0" android:background="?attr/selectableItemBackgroundBorderless"/> </FrameLayout> </LinearLayout> </RelativeLayout> 

Ключ – эффект пульсации должен иметь собственные макеты ( LinearLayout + FrameLayout ), а затем использовать alpha="0" чтобы установить прозрачность изображения, которое имеет рябь, чтобы наложить изображение, которое является сплошным.

Проблема с этим кодом:

  1. Вам нужно жестко закодировать отступы. Если прокладка или прокладка слишком мала, эффект пульсации будет привязан к прямоугольному, а не к кругу. Используйте формулу 48 (высота / ширина) / 7, чтобы определить прокладку. Если деление на 7 не работает, уменьшите делитель, например 6.
  2. Потому что у него есть отступы, поэтому вы не можете коснуться прокладки, чтобы вызвать эффект пульсации. Это приемлемо, если это небольшая кнопка из-за не очевидности, но имеет значение, если это большая кнопка.

Хорошей новостью является альтернативный способ имитации selectableItemBackgroundBorderless с тегом ripple в drawable/ripple.xml :

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorPrimary"> <item android:id="@android:id/mask"> <shape android:shape="oval"> <solid android:color="?android:colorPrimary"/> </shape> </item> </ripple> 

Из того, что я наблюдал, он дает тот же эффект пульсации (за исключением того, что он не имеет пульсации переполнения), как selectableItemBackgroundBorderless do, поэтому нет причин, по которым вы настаиваете на использовании по умолчанию selectableItemBackgroundBorderless

С этим ripple.xml сделайте вот так:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/nav_drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" android:background="@android:color/holo_green_light" android:orientation="vertical"> <ImageView android:id="@+id/imageView4" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:scaleType="fitXY" android:src="@drawable/device_bg" /> <ImageView android:layout_width="48dp" android:layout_height="48dp" android:layout_alignParentEnd="true" android:layout_alignParentTop="true" android:src="@drawable/sidebar_refresh" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentTop="true"> <FrameLayout android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" android:background="@android:color/transparent"> <ImageView android:id="@+id/imageView3" android:layout_width="48dp" android:layout_height="48dp" android:clickable="true" android:src="@drawable/ripple" /> </FrameLayout> </LinearLayout> </RelativeLayout> 

Единственная измененная часть – LinearLayout . Больше нет жестко закодированных дополнений и альфа-изображений. Единственной незначительной проблемой был щелчок в углу, который все равно вызовет эффект пульсации. Я нашел эту ветку, но я не пробовал.

Два вышеперечисленных способа работы даже изображение не прозрачно.