Я пытаюсь добиться анимации переворота кнопки при нажатии кнопки, я добился этого с помощью Аниматор объектов и с помощью Набор анимации . Он работает на всех устройствах, кроме Samsung Galaxy Note 8, а также на некоторых реальных устройствах. Когда я пытаюсь запустить это в Samsung, это вызывает мое приложение зависает на некоторое время . Я не уверен, что это проблема кода или устройства. Я почти уверен, что в коде нет ошибки, но просто чтобы опубликовать анимацию кода.
Моя Samsung Galaxy Note 8 работает на Android 9.
top_to_bottom_anim. xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:valueFrom="0"
android:valueTo="180"
android:propertyName="rotationX"
android:duration="@integer/anim_length" />
<objectAnimator
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:startOffset="@integer/anim_length_half"
android:duration="0" />
</set>
bottom_to_top_anim. xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:duration="0" />
<objectAnimator
android:valueFrom="-180"
android:valueTo="0"
android:propertyName="rotationX"
android:repeatMode="reverse"
android:duration="@integer/anim_length" />
<objectAnimator
android:valueFrom="0.0"
android:valueTo="1.0"
android:propertyName="alpha"
android:startOffset="@integer/anim_length_half"
android:duration="0" />
</set>
layout_button. xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnAdd"
android:layout_width="wrap_content"
android:layout_height="36dp"
android:layout_marginEnd="30dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="Add"
android:textSize="14sp"
/>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnRemove"
android:layout_width="wrap_content"
android:layout_height="36dp"
android:layout_marginEnd="30dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:text="Remove"
android:textSize="14sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity. java
class MainActivity : AppCompatActivity() {
private val mSetTopDown: AnimatorSet by lazy {
AnimatorInflater.loadAnimator(this, R.animator.top_to_bottom_anim) as AnimatorSet
}
private val mSetBottomUp: AnimatorSet by lazy {
AnimatorInflater.loadAnimator(this, R.animator.bottom_to_top_anim) as AnimatorSet
}
private var isRemoveVisible = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_button)
btnAdd.setOnClickListener {
flipCard()
}
btnRemove.setOnClickListener {
}
}
private fun flipCard() {
if (!isRemoveVisible) {
mSetTopDown.setTarget(btnAdd)
mSetBottomUp.setTarget(btnRemove)
mSetTopDown.start()
mSetBottomUp.start()
mSetTopDown.addListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {
}
override fun onAnimationEnd(animation: Animator?) {
btnAdd.visibility = View.INVISIBLE
}
override fun onAnimationCancel(animation: Animator?) {
}
override fun onAnimationStart(animation: Animator?) {
}
})
isRemoveVisible = true
}
}
}
Я что-то упускаю в анимации?