在Android中,为Button添加触摸反馈动画可以提高用户体验
使用StateListAnimator
实现点击态:
在res/anim
目录下创建一个名为button_state_list_animator.xml
的文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="300"
android:fromAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0" />
<scale
android:duration="300"
android:fromXScale="0.8"
android:fromYScale="0.8"
android:interpolator="@android:anim/accelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0" />
</set>
然后在Button的XML布局文件中添加android:stateListAnimator
属性:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me"
android:stateListAnimator="@anim/button_state_list_animator" />
注意:为了在Android 6.0(API 23)及以上版本中正常使用StateListAnimator
,需要在项目中启用AnimatedStateListDrawableCompat
库。在build.gradle
文件中添加以下依赖:
implementation 'androidx.core:core-ktx:1.7.0'
使用MaterialButton
替换Button
:
MaterialButton
内置了触摸反馈动画效果,可以直接在XML布局文件中使用:
<com.google.android.material.button.MaterialButton
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me"
app:icon="@drawable/ic_your_icon"
app:backgroundTint="@color/your_background_tint" />
使用RippleDrawable
实现触摸反馈:
在Button的XML布局文件中添加android:background
属性,并设置为@drawable/button_ripple
:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me"
android:background="@drawable/button_ripple" />
然后在res/drawable
目录下创建一个名为button_ripple.xml
的文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:id="@android:id/mask">
<color android:color="#fff" />
</item>
</ripple>
通过以上方法,可以为Android Button添加触摸反馈动画,提高用户体验。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。