Android逐帧动画实现代码
逐帧动画(Frame-by-frameAnimations)顾名思义就是一帧接着一帧的播放图片,就像放电影一样。可以通过xml实现也可以通过java代码实现。逐帧动画适合实现比较简单的动画效果,如果要实现复杂动画不太建议使用逐帧动画。
xml方式实现:
step1:在res/drawable目录下一个文件sample_animlist.xml:
<?xmlversion="1.0"encoding="utf-8"?> <animation-listxmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@mipmap/sample_1" android:duration="100"/> <item android:drawable="@mipmap/sample_2" android:duration="100"/> <item android:drawable="@mipmap/sample_3" android:duration="100"/> <item android:drawable="@mipmap/sample_4" android:duration="100"/> <item android:drawable="@mipmap/sample_5" android:duration="100"/> <item android:drawable="@mipmap/sample_6" android:duration="100"/> </animation-list>
动画列表(animation-list)由一个或者多个item节点组成,item节点用来声明一个动画帧
drawable:该帧的图片资源
duration:播放时间单位为毫秒
oneshot:是否只播放一次,true表示只会播放一次,false表示一直循环播放
step2:
利用ImageView作为播放载体
<ImageView android:id="@+id/iv_ani" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/sample_animlist"/>
step3:在Activity实现初始化、暂停、播放。
publicclassMainActivityextendsAppCompatActivity{ privateImageViewiv_ani; privateAnimationDrawablemAnimationDrawable; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv_ani=(ImageView)findViewById(R.id.iv_ani); mAnimationDrawable=(AnimationDrawable)iv_ani.getDrawable(); } @Override publicvoidonWindowFocusChanged(booleanhasFocus){ super.onWindowFocusChanged(hasFocus); //window初始化完毕开始播放动画 animationStart(); } @Override protectedvoidonPause(){ animationStop(); super.onPause(); } privatevoidanimationStart(){ if(null!=mAnimationDrawable) mAnimationDrawable.start();//开始播放 } privatevoidanimationStop(){ if(null!=mAnimationDrawable) mAnimationDrawable.stop();//暂停播放 } }
纯Java方式实现
publicclassMainActivityextendsAppCompatActivity{ privateImageViewiv_ani; privateAnimationDrawablemAnimationDrawable; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv_ani=(ImageView)findViewById(R.id.iv_ani); initAnimationDrawable(); } privatevoidinitAnimationDrawable(){ mAnimationDrawable=newAnimationDrawable(); for(inti=1;i<=4;i++){ intid=getResources().getIdentifier("sample_"+i,"mipmap",getPackageName()); Drawabledrawable=getResources().getDrawable(id); mAnimationDrawable.addFrame(drawable,100); } mAnimationDrawable.setOneShot(false); iv_ani.setImageDrawable(mAnimationDrawable); } }
addFrame(Drawableframe,intduration):添加一帧,并设置该帧显示的持续时间
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。