Android实现仿慕课网下拉加载动画
具体实现方法就不多介绍了先附上源码,相信大家都容易看的懂:
这里为了让这个动画效果可被复用,于是就继承了ImageView去实现某些方法
packagecom.example.loading_drawable; importandroid.content.Context; importandroid.graphics.drawable.AnimationDrawable; importandroid.util.AttributeSet; importandroid.util.Log; importandroid.view.View; importandroid.view.animation.Animation; importandroid.widget.ImageView; publicclassMyImgViewextendsImageView{ //动画图层类 privateAnimationDrawablebg_anim; publicMyImgView(Contextcontext){ super(context,null); initView(); } publicMyImgView(Contextcontext,AttributeSetattrs){ super(context,attrs,0); } publicMyImgView(Contextcontext,AttributeSetattrs,intdefStyle){ super(context,attrs,defStyle); } //初始化 privatevoidinitView(){ setBackgroundResource(R.drawable.flash_anim); bg_anim=(AnimationDrawable)getBackground(); Log.i("AAA","iniView"); } /** *开启动画效果 */ publicvoidstartAnim(){ if(bg_anim!=null){ bg_anim.start(); } } /** *停止动画效果 */ publicvoidstopAnim(){ if(bg_anim!=null&&bg_anim.isRunning()){ bg_anim.stop(); } } /* *(non-Javadoc) * *@seeandroid.widget.ImageView#setVisibility(int)当控件被显示时就调用开启动画效果,反之 */ @Override publicvoidsetVisibility(intvisibility){ super.setVisibility(visibility); if(visibility==View.VISIBLE){ startAnim(); }else{ stopAnim(); } } }
接下来就是:在res文件夹下新建drawable文件夹,再此文件夹下新建flash_anim.xml文件,具体如下:
<?xmlversion="1.0"encoding="utf-8"?> <animation-listxmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <itemandroid:drawable="@drawable/a01_02"android:duration="50"/> <itemandroid:drawable="@drawable/a01_04"android:duration="50"/> <itemandroid:drawable="@drawable/a01_06"android:duration="50"/> <itemandroid:drawable="@drawable/a01_08"android:duration="50"/> <itemandroid:drawable="@drawable/a01_10"android:duration="50"/> <itemandroid:drawable="@drawable/a01_12"android:duration="50"/> <itemandroid:drawable="@drawable/a01_14"android:duration="50"/> <itemandroid:drawable="@drawable/a01_16"android:duration="50"/> <itemandroid:drawable="@drawable/a01_25"android:duration="50"/> <itemandroid:drawable="@drawable/a01_26"android:duration="50"/> <itemandroid:drawable="@drawable/a01_27"android:duration="50"/> <itemandroid:drawable="@drawable/a01_28"android:duration="50"/> <itemandroid:drawable="@drawable/a01_30"android:duration="50"/> <itemandroid:drawable="@drawable/a01_31"android:duration="50"/> <itemandroid:drawable="@drawable/a01_32"android:duration="50"/> <itemandroid:drawable="@drawable/a01_41"android:duration="50"/> <itemandroid:drawable="@drawable/a01_42"android:duration="50"/> <itemandroid:drawable="@drawable/a01_43"android:duration="50"/> <itemandroid:drawable="@drawable/a01_44"android:duration="50"/> <itemandroid:drawable="@drawable/a01_45"android:duration="50"/> <itemandroid:drawable="@drawable/a01_46"android:duration="50"/> <itemandroid:drawable="@drawable/a01_47"android:duration="50"/> <itemandroid:drawable="@drawable/a01_48"android:duration="50"/> <itemandroid:drawable="@drawable/a01_57"android:duration="50"/> <itemandroid:drawable="@drawable/a01_58"android:duration="50"/> <itemandroid:drawable="@drawable/a01_59"android:duration="50"/> <itemandroid:drawable="@drawable/a01_60"android:duration="50"/> <itemandroid:drawable="@drawable/a01_61"android:duration="50"/> <itemandroid:drawable="@drawable/a01_62"android:duration="50"/> <itemandroid:drawable="@drawable/a01_63"android:duration="50"/> <itemandroid:drawable="@drawable/a01_64"android:duration="50"/> </animation-list>
这样就基本搞定了,接下来就要在main中调用自定义的main就可以;如下:
packagecom.example.loading_drawable; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.Gravity; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.LinearLayout; importandroid.widget.LinearLayout.LayoutParams; /** *@authorAdministrator慕课网下拉刷新进度显示控件 * */ publicclassMainActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); LinearLayoutrootLayout=newLinearLayout(this); rootLayout.setOrientation(LinearLayout.VERTICAL); rootLayout.setLayoutParams(newLinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); rootLayout.setGravity(Gravity.CENTER); Buttonbtn=newButton(this); btn.setText("展现动画"); finalMyImgViewimgView=newMyImgView(MainActivity.this); imgView.setLayoutParams(newLinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); imgView.setVisibility(View.GONE); rootLayout.addView(btn); rootLayout.addView(imgView); setContentView(rootLayout); btn.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewarg0){ imgView.setVisibility(View.VISIBLE); } }); } }
这里是用自定义代码布局文件做的,布局方便,插件代码整合,如上所述,这个动画就完成了,只在需要的地方设置imgview为显示,动画就会开启,隐藏动画就会被关闭。
具体内容到此为止,希望大家能够喜欢。