Эффект пульсации в нажатом состоянии + прозрачность в нормальном состоянии

Я бы хотел, чтобы ImageView в ViewGroup, когда он нажал, рисовал рябь, и это работает ! Но когда нажата кнопка ViewGroup, ImageView внутри нее должен оставаться прозрачным, иначе фон ImageView будет виден: (этот цвет альфа-оранжевый, вы видите на самом деле, является пульсацией при нажатии). Введите описание изображения здесь

Это происходит только с устройствами API 21+. С устройствами API <21 Я использую селектор, и фон изображения остается прозрачным по желанию при нажатии ViewGroup.

layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/item_detail_field" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="@dimen/margin_left" android:paddingStart="@dimen/margin_left" android:paddingTop="@dimen/margin_top_item_field" android:paddingBottom="@dimen/margin_bottom" android:baselineAligned="false" android:background="@drawable/layout" android:stateListAnimator="@anim/touch_raise" android:orientation="horizontal"> ... <ImageView android:id="@+id/item_detail_showfield_icon" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/button_mini_oval" android:stateListAnimator="@anim/touch_raise" android:clickable="true" android:contentDescription="@null" android:scaleType="center" android:visibility="invisible" android:src="@drawable/show_button"/> ... </LinearLayout> 

рисуем / button_mini_oval.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="oval"> <solid android:color="@color/primary_highlight" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="@android:color/transparent" /> </shape> </item> </selector> 

вытяжка-V21 / button_mini_oval.xml

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime" android:color="?android:colorControlHighlight"> <item android:state_pressed="true"> <shape android:shape="oval"> <solid android:color="@android:color/white" /> </shape> </item> <item> <color android:color="@android:color/transparent" /> </item> </ripple> 

Я попробовал много конфигураций в рябке xml, добавив <selector> он работает (см. Ниже), но если вы просто коснитесь ImageView, пульсация не будет видна (анимация пульсации кажется срезанной), только если вы продолжаете нажимать, вы видите пульсация …

Какая комбинация имеет пульсацию в нажатом состоянии и прозрачную в нормальном состоянии?

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime" android:color="?android:colorControlHighlight"> <item> <selector> <item android:state_pressed="true"> <shape android:shape="oval"> <solid android:color="@android:color/white" /> </shape> </item> <item> <color android:color="@android:color/transparent" /> </item> </selector> </item> </ripple> 

Удаление android:state_pressed="true" , я нашел 2 решения, но в обоих случаях я потерял анимацию touch_raise (почему?):

С замаскированной пульсацией:

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime" android:color="?android:colorControlHighlight"> <item android:id="@android:id/mask"> <selector> <item> <shape android:shape="oval"> <solid android:color="@android:color/white" /> </shape> </item> <item> <color android:color="@android:color/transparent" /> </item> </selector> </item> </ripple> 

С разоблаченной небольшой пульсацией (лучше 1):

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime" android:color="?android:colorControlHighlight"> <selector> <item> <color android:color="@android:color/transparent" /> </item> </selector> </ripple> 

Я не знаю, почему достаточно добавить <selector> чтобы иметь рябь на прозрачном фоне !!! Многие люди пытались достичь этого, но это не было целью Google, а это очень полезно, это такие ситуации.

Со мной это работает

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/white" android:radius="3dp"> <item android:drawable="@drawable/transparent_ripple_button"/> </ripple> 

И отдельный

transparent_ripple_button.xml

В вашей папке

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true"> <shape android:shape="rectangle"> <solid android:color="@color/black_12" /> <stroke android:width="0.2dp" android:color="@color/white" /> <corners android:radius="3dp" /> </shape> </item> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="@color/black_12" /> <stroke android:width="0.2dp" android:color="@color/white" /> <corners android:radius="3dp" /> </shape> </item> <item> <shape android:shape="rectangle"> <solid android:color="@android:color/transparent" /> <stroke android:width="0.2dp" android:color="@color/white" /> <corners android:radius="3dp" /> </shape> </item> </selector> 
Intereting Posts
Должны ли мы ссылаться на объекты по их интерфейсам на платформе Android? Существует ли универсальный или «жирный» файл класса для Java? Как синхронизировать данные между различными устройствами Кнопка прослушивателя для кнопки в фрагменте в android Как щелкнуть представление программы Android через MonkeyRunner? Как создать вертикальный центр двоеточия в TextView Android: Эквалайзер – getNumberOfBands () Profile.getCurrentProfile () возвращает значение null после входа в систему (FB API версии 4.0) Android Wear: программный экран пробуждения Как проверить мое приложение на моем телефоне? У меня есть Eclipse w / Android plug-in Inflater раздувается, но высота мала (выглядит как wrap_content и требуется fill_parent) Определите, когда ViewPager меняет страницы Как установить свойства разделителя в спискеFragment? Как правильно аннотировать классы наследования с использованием ORMLite? Push-уведомление на Android Jelly Bean OS