diff --git a/views/src/main/java/ru/touchin/roboswag/views/CrossfadeView.kt b/views/src/main/java/ru/touchin/roboswag/views/CrossfadeView.kt new file mode 100644 index 0000000..b8e3e52 --- /dev/null +++ b/views/src/main/java/ru/touchin/roboswag/views/CrossfadeView.kt @@ -0,0 +1,44 @@ +package ru.touchin.roboswag.views + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import android.view.ViewGroup +import android.widget.ViewAnimator +import androidx.annotation.IdRes +import androidx.core.content.withStyledAttributes +import androidx.core.view.children + +class CrossfadeView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null +) : ViewAnimator(context, attrs) { + + @IdRes + private var defaultChild: Int = 0 + + init { + setInAnimation(context, R.anim.fade_in_animation) + setOutAnimation(context, R.anim.fade_out_animation) + + context.withStyledAttributes(attrs, R.styleable.CrossfadeView, 0) { + defaultChild = getResourceId(R.styleable.CrossfadeView_defaultChild, 0) + } + } + + fun showChild(@IdRes childId: Int) { + children.forEachIndexed { index, view -> + if (view.id == childId && displayedChild != index) { + displayedChild = index + } + } + } + + override fun addView(child: View, index: Int, params: ViewGroup.LayoutParams?) { + super.addView(child, index, params) + if (child.id == defaultChild) { + showChild(defaultChild) + } + } + +} diff --git a/views/src/main/res/anim/fade_in_animation.xml b/views/src/main/res/anim/fade_in_animation.xml new file mode 100644 index 0000000..8db9f37 --- /dev/null +++ b/views/src/main/res/anim/fade_in_animation.xml @@ -0,0 +1,6 @@ + + diff --git a/views/src/main/res/anim/fade_out_animation.xml b/views/src/main/res/anim/fade_out_animation.xml new file mode 100644 index 0000000..feb5b9b --- /dev/null +++ b/views/src/main/res/anim/fade_out_animation.xml @@ -0,0 +1,5 @@ + diff --git a/views/src/main/res/values/attrs.xml b/views/src/main/res/values/attrs.xml index 9b154af..8b892a4 100644 --- a/views/src/main/res/values/attrs.xml +++ b/views/src/main/res/values/attrs.xml @@ -56,4 +56,8 @@ + + + +