android statelistdrawable如何实现动画效果

avatar
作者
猴君
阅读量:0

在Android中,StateListDrawable本身不支持动画效果。但是,你可以使用TransitionDrawableAnimationDrawable结合StateListDrawable来实现动画效果。

这里是一个简单的例子,展示了如何使用TransitionDrawableAnimationDrawable实现动画效果:

  1. 首先,创建一个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> 
  1. 创建一个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> 
  1. 在你的代码中,设置StateListDrawable并添加状态。然后,为每个状态设置TransitionDrawable
// 获取TransitionDrawable TransitionDrawable transitionDrawable = (TransitionDrawable) getResources().getDrawable(R.drawable.transition);  // 创建StateListDrawable StateListDrawable stateListDrawable = new StateListDrawable();  // 为按下状态设置TransitionDrawable stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, transitionDrawable);  // 为默认状态设置另一个Drawable stateListDrawable.addState(new int[]{}, getResources().getDrawable(R.drawable.default_state));  // 设置按钮的背景 button.setBackground(stateListDrawable); 
  1. 当按钮被按下时,开始动画。
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中定义的动画效果在两个状态之间进行过渡。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!