4

в Android, я хочу сделать что-то подобное (но с 2 чередующиеся цвета черный и белый:Изменение FAB цвета с волновым эффектом

изменение цвета с волновым эффектом, как этот

enter image description here

Что Я пытался сделать это:

1) устанавливается по умолчанию backgroundTint & пульсация цвета с помощью XML

app:backgroundTint="@android:color/black" 
app:rippleColor="@android:color/white" 

2) в OnClick метод, изменил backgroundTint к белому и пульсации цвета до черного

установить строку для первоначального цвета т.е. high_color = "black". затем,

fab.setOnClickListener(new View.OnClickListener() { 
     @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 
     @Override 
     public void onClick(View v) { 
      if(high_color.equals("black")){ 
       fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.white))); 
       fab.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.black))); 
       fab.setRippleColor(ContextCompat.getColor(getApplicationContext(), R.color.black)); 
       high_color = "white"; 
      }else { 
       fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.black))); 
       fab.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.white))); 
       fab.setRippleColor(ContextCompat.getColor(getApplicationContext(), R.color.whites)); 
       high_color = "black"; 
      } 
     } 
    }); 

теперь я получаю что-то вроде этого:

то, что я получаю это

enter image description here

есть в любом случае, чтобы сделать это один вид, как первый? как замедление скорости анимации пульсации или что-то в этом роде?

+0

взгляд на эту библиотеку: https: // GitHub.com/ozodrukh/RippleDrawable – rafsanahmad007

+0

Это не похоже на эффект пульсации для меня. Вы пробовали Circular Reveal для этого? проверьте это: https://guides.codepath.com/android/Circular-Reveal-Animation. И это: https://developer.android.com/training/material/animations.html –

+0

А если вам нужен пример ... проверьте мое репо, он сделает именно то, что вы хотите, но в CustomView, в этом файл: https://github.com/leandroBorgesFerreira/LoadingButtonAndroid/blob/master/loading-button-android/src/main/java/br/com/simplepass/loading_button_lib/AnimatedDrawables/CircularRevealAnimatedDrawable.java –

ответ

0

Я думаю, что вы должны использовать селекторы Селекторы легко вносят изменения в фон.

Использование селекторов подобным образом, как это

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@android:color/white" state_enabled="true "/> <item android:color="@android:color/black" state_enabled="false "/> </selector>

использовать его в качестве фона ФАБ

app:background ="@drawable/selector"

Это сделает белый цвет в качестве фона When It Is Tapped.Else Это Will Be Black Есть много других кодов android в селекторах. Читайте о селекторах на Android-разработчиках. Сайт Ответить Мне, если это действительно Помог вам.

+0

Вы даже установите Ripple Color In Fab 'app: rippleColor =" @ android: color/# 999999 "' –

0

Ну, никогда не пробовал это на FAB, но я реализовал то же самое на ImageButton для простоты, как показано ниже, и это работает. Надеюсь, поможет. Это предназначено для API, s больше 21 (Lollipop). У моего ImageButton по умолчанию по умолчанию 6dp, и при касании он будет поднят до 18dp (6dp + 12dp), который вы можете изменить, если вам нужно в lift_on_touch.xml. Кроме того, я использую StateListAnimator, который изменяется в зависимости от изменения состояния ImageButton.

<ImageButton 
    android:id="@+id/share_fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="16dp" 
    android:background="@drawable/ripples_on_touch" 
    android:elevation="6dp" 
    android:padding="16dp" 
    android:src="@drawable/ic_share_white_24dp" 
    android:stateListAnimator="@animator/lift_on_touch" 
    tools:targetApi="lollipop" /> 

v21/ripples_on_touch.xml

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:color="#F83E0ACC" 
tools:targetApi="lollipop"> 
<item> 
    <shape android:shape="oval"> 
     <solid android:color="#FFFF6F00" /> 
    </shape> 
</item> 
</ripple> 

v21/lift_on_touch.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true"> 
    <set> 
     <objectAnimator 
      android:duration="@android:integer/config_longAnimTime" 
      android:propertyName="scaleX" 
      android:valueTo="1.250" 
      android:valueType="floatType" /> 
     <objectAnimator 
      android:duration="@android:integer/config_longAnimTime" 
      android:propertyName="scaleY" 
      android:valueTo="1.250" 
      android:valueType="floatType" /> 
     <objectAnimator 
      android:duration="@android:integer/config_longAnimTime" 
      android:propertyName="translationZ" 
      android:valueTo="12dp" 
      android:valueType="floatType" /> 
    </set> 
</item> 

<item> 
    <set> 
     <objectAnimator 
      android:duration="@android:integer/config_longAnimTime" 
      android:propertyName="scaleX" 
      android:valueTo="1.0" 
      android:valueType="floatType" /> 
     <objectAnimator 
      android:duration="@android:integer/config_longAnimTime" 
      android:propertyName="scaleY" 
      android:valueTo="1.0" 
      android:valueType="floatType" /> 
     <objectAnimator 
      android:duration="@android:integer/config_longAnimTime" 
      android:propertyName="translationZ" 
      android:valueTo="0dp" 
      android:valueType="floatType" /> 
    </set> 
</item> 
</selector>