35

Я использую эффект пульсации на моем навигационном ящике. Я поставил его, как это и применил его к моему ListView:Цвет волны пульсации Android

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true" android:drawable="@color/black_200" /> 

    <item android:state_pressed="true" android:color="@color/black_200"> 
     <ripple android:color="@color/black_400" /> 
    </item> 

    <item android:drawable="@color/white" /> 
</selector> 

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

ответ

41

Вы можете контролировать цвет RippleDrawable, выполнив следующие действия:

RippleDrawable rippleDrawable = (RippleDrawable)view.getBackground(); // assumes bg is a RippleDrawable 

int[][] states = new int[][] { new int[] { android.R.attr.state_enabled} }; 
int[] colors = new int[] { Color.BLUE }; // sets the ripple color to blue 

ColorStateList colorStateList = new ColorStateList(states, colors); 
rippleDrawable.setColor(colorStateList); 

Или, с помощью XML:

<?xml version="1.0" encoding="utf-8"?> 
<ripple 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#FFFF0000"> <!-- The ripple will be red --> 

    <!-- the normal bg color will be light grey --> 
    <item> 
     <color android:color="#FFDDDDDD" /> 
    </item> 

    <!-- make sure the ripple doesn't exceed the bounds --> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="?android:colorAccent" /> 
     </shape> 
    </item> 
</ripple> 

EDIT

После просмотра ответ @ i.shadrin в ниже, я должен признать, что это гораздо более простой подход (с использованием стилей). Если это вариант для вас, я бы рекомендовал его.

+0

Это также возможно в xml? – qwertz

+0

Да, отредактировал мой ответ. –

+0

Спасибо. Как мне связать эту рябь с уже существующим селектором? – qwertz

57

Это намного проще сделать с помощью стилей:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    ... 
    <item name="colorControlHighlight">@color/ripple_material_dark</item> 
    ... 
</style> 
+7

Как плакат принятого ответа, я голосую, это становится принятым ответом –

+0

Работает как шарм в «Xamarin.Android» тоже, неудивительно, конечно! _ –

9

добавить эти две строки кода внутри вашей точки зрения, чтобы дать эффект ряби.

android:clickable="true" 
android:background="?attr/selectableItemBackground" 
+1

Не работает с черным (или очень темным) фоном. –

1

Пример пульсация использовать с селектором на апи лвла 21 и выше

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="?attr/colorControlHighlight"> 

    <!-- ripple mask --> 
    <item android:id="@+id/mask"> 
     <color android:color="@android:color/white"/> 
    </item> 

    <!-- background shape or color --> 
    <item android:drawable="@drawable/rectangle_rounded_steel_blue"/> 

</ripple> 
2

Если вы используете кнопку пользовательского цвета, то используйте ниже код для волнового эффекта. Сохраните файл в поле с именем my_ripple.xml и установите в фоновом режиме кнопки.

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:too`enter code here`ls="http://schemas.android.com/tools" 
    android:color="@color/ripple_color" 
    tools:targetApi="lollipop"> 
    <item android:id="@android:id/mask"> 
    <shape android:shape="rectangle"> 
     <solid android:color="@color/ripple_color" 
      /> 
    </shape> 
    </item> 
    <item 
    android:id="@android:id/background" 
    android:drawable="@color/button_color" /> 
</ripple> 

 Смежные вопросы

  • Нет связанных вопросов^_^