在Android中,StateListDrawable本身不支持动画效果。但是,你可以使用TransitionDrawable和AnimationDrawable结合StateListDrawable来实现动画效果。
这里是一个简单的例子,展示了如何使用TransitionDrawable和AnimationDrawable实现动画效果:
transition.xml文件,放在res/drawable目录下。这个文件将定义两个状态之间的过渡动画。<?xml version="1.0" encoding="utf-8"?><transition xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 第一个状态的图片 --> <item android:drawable="@drawable/state1" /> <!-- 第二个状态的图片 --> <item android:drawable="@drawable/state2" /></transition>创建一个animation.xml文件,放在res/anim目录下。这个文件将定义动画的持续时间和插值器。<?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" /></set>在你的代码中,设置StateListDrawable并添加状态。然后,为每个状态设置TransitionDrawable。// 获取TransitionDrawableTransitionDrawable transitionDrawable = (TransitionDrawable) getResources().getDrawable(R.drawable.transition);// 创建StateListDrawableStateListDrawable stateListDrawable = new StateListDrawable();// 为按下状态设置TransitionDrawablestateListDrawable.addState(new int[]{android.R.attr.state_pressed}, transitionDrawable);// 为默认状态设置另一个DrawablestateListDrawable.addState(new int[]{}, getResources().getDrawable(R.drawable.default_state));// 设置按钮的背景button.setBackground(stateListDrawable);当按钮被按下时,开始动画。button.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 开始过渡动画 transitionDrawable.startTransition(300); break; case MotionEvent.ACTION_UP: // 结束过渡动画 transitionDrawable.reverseTransition(300); break; } return false; }});这样,当按钮被按下时,TransitionDrawable会根据animation.xml中定义的动画效果在两个状态之间进行过渡。


