Android逐帧动画、属性动画的简单实现
2017-05-18 18:37
591 查看
需求
这里我们实现一个简单的逐帧动画,即一组图片快速轮换的动画效果。实现
动画的布局文件:将每一个图片放入(这个xml文件在AS2.2只能放在drawable目录下,低版本或许可以放在anim目录)
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/order_loading_1" android:duration="150" /> <item android:drawable="@drawable/order_loading_2" android:duration="150" /> <item android:drawable="@drawable/order_loading_3" android:duration="150" /> <item android:drawable="@drawable/order_loading_4" android:duration="150" /> <item android:drawable="@drawable/order_loading_5" android:duration="150" /> </animation-list>
页面的布局文件:(使用ImageView作为动画载体)
<ImageView android:visibility="gone" android:layout_centerInParent="true" android:layout_marginBottom="50dp" android:id="@+id/img_loading" android:layout_width="145dp" tools:visibility="visible" android:layout_height="138dp" />
代码实现:
private AnimationDrawable animLoading; private ImageView imgLoading; /** * 初始化动画 */ private void initAnim() { imgLoading.setBackgroundResource(R.drawable.order_loading); animLoading = (AnimationDrawable) imgLoading.getBackground(); // 开始动画 animLoading.start(); } // 停止动画 if (animLoading.isRunning()) { animLoading.stop(); }
注意:在这里释放动画图片资源会报错,图片资源已释放。自带的回收机制会自动进行回收。
需求
下面继续实现简单的属性动画,并带声音。
实现
动画的布局文件:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="400" android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="0" android:toYDelta="-580" /> <scale android:duration="400" android:fromXScale="1" android:fromYScale="1" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.3" android:toYScale="1.3" /> </set>
页面的布局文件:(使用ImageView作为动画载体)
<ImageView android:id="@+id/rocket" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:src="@drawable/rocket" tools:visibility="visible" android:visibility="gone"/>
代码实现:
private SoundPool soundPool; private Animation animation; ImageView rocket; //配置火箭声音和动画 private void loadSound() { animation = AnimationUtils.loadAnimation(getActivity(), R.anim.rocket_anim); soundPool = new SoundPool(2, AudioManager.STREAM_SYSTEM, 5); soundPool.load(getActivity(), R.raw.rocket, 1); } // 开始动画 播放声音 rocket.startAnimation(animation); animation.setAnimationListener(new Animation.AnimationListener() { 4000 @Override public void onAnimationStart(Animation animation) { rocket.setVisibility(View.VISIBLE); // 播放音效 soundPool.play(1, 1, 1, 0, 0, 1); } @Override public void onAnimationEnd(Animation animation) { rocket.setVisibility(View.GONE); } @Override public void onAnimationRepeat(Animation animation) { } });
注意:将声音文件放在raw文件下
动画Drawable
drawable:<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/progress_single" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360"/>
布局文件中使用:
<ProgressBar android:id="@+id/progress_bar" style="@android:style/Widget.ProgressBar.Small" android:layout_width="25dp" android:layout_height="25dp" android:layout_gravity="center" android:indeterminateDrawable="@drawable/anim_progress_bar" />
如此可以直接通过布局的方法实现动画,不需要在代码中进行设置。
相关文章推荐
- Android简单用属性动画实现两个控件重叠
- Android开发中 简单实现属性动画
- Android 属性动画实现一个简单的PopupWindow
- Android属性动画简单实现图片的伸缩
- Android属性动画简单实现图片的伸缩
- 实现Android简单动画旋转案例
- Android 属性动画 源码解析 深入了解其内部实现
- RotateAniamtion_实现Android简单动画旋转案例
- 58同城加载动画的实现( Android属性动画)
- Android实现简单移动动画
- Android 属性动画 源码解析 深入了解其内部实现
- Mono For Android中简单实现按钮的动画效果
- 实现Android简单动画旋转案例
- Android动画效果Animation之Tween实现简单动画
- Android 属性动画(Property Animation) 源码解析 深入了解其内部实现
- android中小火箭动态喷射动画的简单实现
- Android中一个视图弹出动画的简单实现
- Android Graphics 学习(1)----播放gif动画简单的实现
- 纯css3无js实现的Android Logo(有简单动画)
- Android 通过Animate硬编码实现简单的平移、旋转、缩放及透明度动画过程