Каков наилучший способ показать наложение анимации пульсации? - PullRequest
0 голосов
/ 29 сентября 2018

Я хочу использовать анимацию, в которой значение альфа уменьшается с увеличением масштаба эллипса.

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
    android:pivotX="50%"
    android:pivotY="50%"
    android:fromXScale="0"
    android:fromYScale="0"
    android:toXScale="2"
    android:toYScale="2"
    android:repeatCount="infinite"
    android:repeatMode="restart"
 />
<alpha android:fromAlpha="1"
    android:toAlpha="0"
    android:repeatCount="infinite"
    android:repeatMode="restart"/>
</set>

enter image description here

На рисунке вышепоказывает шаг анимации, а не фактический шаг.(То есть на приведенном выше изображении показаны пять идентичных анимаций ряби, запущенных с задержкой.)

В настоящее время я реализую это, создав один просмотр для каждой анимации и запустив каждый из них.

layout.xml

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000"
android:elevation="5dp">

<ImageView
    android:id="@+id/imageView2"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_gravity="center_vertical|end"
    android:background="@drawable/button"/>
<ImageView
    android:id="@+id/imageView3"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_gravity="center_vertical|end"
    android:background="@drawable/button"/>
<ImageView
    android:id="@+id/imageView4"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_gravity="center_vertical|end"
    android:background="@drawable/button"/>
<ImageView
    android:id="@+id/imageView5"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_gravity="center_vertical|end"
    android:background="@drawable/button"/>
<ImageView
    android:id="@+id/imageView6"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_gravity="center_vertical|end"
    android:background="@drawable/button"/>
<Button
    android:id="@+id/button"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_gravity="center_vertical|end"
    android:background="@drawable/button"
    android:textColor="#000"/>


</FrameLayout>

code.kt

button.setOnClickListener {

    // Plays the animation in different views at 0.2 second intervals.
    Observable.just(imageView2,imageView3,imageView4,imageView5,imageView6)
            .zipWith(Observable.interval(200,TimeUnit.MILLISECONDS),{ v:ImageView, _:Long->
                v
            })
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({ view->
                val ani = AnimationUtils.loadAnimation(activity!!,R.anim.button_anim)
                ani.duration = 1000
                view.startAnimation(ani)
            },{

            })
}

В результате этот метод соответствует тому, что я хочу, но я чувствую, что слишком много бесполезных представлений для представления одного потока.

Есть ли более эффективный способ?

...