最近在做动画的项目,在eoe看了篇帖子,然就试着做了一下仿慕课网的下来加载动画。
毕竟我看到的那篇帖子里,没有附上源码。于是自己用ps了下图标;实现了之后其实也挺简单,就是AnimationDrawable类进行 Animation-list中item的循环遍历图片,类似于flash里的帧帧动画
接下来就先附上源码,相信大家都容易看的懂:
这里为了 让这个动画效果可被复用,于是就继承了 ImageView 去实现某些方法
1 package com.example.loading_drawable; 2 3 import android.content.Context; 4 import android.graphics.drawable.AnimationDrawable; 5 import android.util.AttributeSet; 6 import android.util.Log; 7 import android.view.View; 8 import android.view.animation.Animation; 9 import android.widget.ImageView; 10 11 public class MyImgView extends ImageView { 12 // 动画图层类 13 private AnimationDrawable bg_anim; 14 15 public MyImgView(Context context) { 16 super(context, null); 17 initView(); 18 } 19 20 public MyImgView(Context context, AttributeSet attrs) { 21 super(context, attrs, 0); 22 } 23 24 public MyImgView(Context context, AttributeSet attrs, int defStyle) { 25 super(context, attrs, defStyle); 26 27 } 28 //初始化 29 private void initView() { 30 setBackgroundResource(R.drawable.flash_anim); 31 bg_anim = (AnimationDrawable) getBackground(); 32 Log.i("AAA", "iniView"); 33 } 34 35 /** 36 * 开启动画效果 37 */ 38 public void startAnim() { 39 if (bg_anim != null) { 40 bg_anim.start(); 41 } 42 } 43 44 /** 45 * 停止动画效果 46 */ 47 public void stopAnim() { 48 if (bg_anim != null && bg_anim.isRunning()) { 49 bg_anim.stop(); 50 } 51 } 52 53 /* 54 * (non-Javadoc) 55 * 56 * @see android.widget.ImageView#setVisibility(int) 当控件被显示时就调用 开启动画效果,反之 57 */ 58 @Override 59 public void setVisibility(int visibility) { 60 super.setVisibility(visibility); 61 if (visibility == View.VISIBLE) { 62 startAnim(); 63 } else { 64 stopAnim(); 65 } 66 } 67 68 }
接下来就是:在res文件夹下新建 drawable文件夹,再此文件夹下新建 flash_anim.xml文件,具体如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <animation-list xmlns:android="http://schemas.android.com/apk/res/android" 3 android:oneshot="false"> 4 <item android:drawable="@drawable/a01_02" android:duration="50"/> 5 <item android:drawable="@drawable/a01_04" android:duration="50"/> 6 <item android:drawable="@drawable/a01_06" android:duration="50"/> 7 <item android:drawable="@drawable/a01_08" android:duration="50"/> 8 <item android:drawable="@drawable/a01_10" android:duration="50"/> 9 <item android:drawable="@drawable/a01_12" android:duration="50"/> 10 <item android:drawable="@drawable/a01_14" android:duration="50"/> 11 <item android:drawable="@drawable/a01_16" android:duration="50"/> 12 <item android:drawable="@drawable/a01_25" android:duration="50"/> 13 <item android:drawable="@drawable/a01_26" android:duration="50"/> 14 <item android:drawable="@drawable/a01_27" android:duration="50"/> 15 <item android:drawable="@drawable/a01_28" android:duration="50"/> 16 <item android:drawable="@drawable/a01_30" android:duration="50"/> 17 <item android:drawable="@drawable/a01_31" android:duration="50"/> 18 <item android:drawable="@drawable/a01_32" android:duration="50"/> 19 <item android:drawable="@drawable/a01_41" android:duration="50"/> 20 <item android:drawable="@drawable/a01_42" android:duration="50"/> 21 <item android:drawable="@drawable/a01_43" android:duration="50"/> 22 <item android:drawable="@drawable/a01_44" android:duration="50"/> 23 <item android:drawable="@drawable/a01_45" android:duration="50"/> 24 <item android:drawable="@drawable/a01_46" android:duration="50"/> 25 <item android:drawable="@drawable/a01_47" android:duration="50"/> 26 <item android:drawable="@drawable/a01_48" android:duration="50"/> 27 <item android:drawable="@drawable/a01_57" android:duration="50"/> 28 <item android:drawable="@drawable/a01_58" android:duration="50"/> 29 <item android:drawable="@drawable/a01_59" android:duration="50"/> 30 <item android:drawable="@drawable/a01_60" android:duration="50"/> 31 <item android:drawable="@drawable/a01_61" android:duration="50"/> 32 <item android:drawable="@drawable/a01_62" android:duration="50"/> 33 <item android:drawable="@drawable/a01_63" android:duration="50"/> 34 <item android:drawable="@drawable/a01_64" android:duration="50"/> 35 </animation-list>
这样就基本搞定了,接下来就要在main中调用自定义的main就可以;如下:
1 package com.example.loading_drawable; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.view.Gravity; 6 import android.view.View; 7 import android.view.View.OnClickListener; 8 import android.widget.Button; 9 import android.widget.LinearLayout; 10 import android.widget.LinearLayout.LayoutParams; 11 12 /** 13 * @author Administrator 慕课网下拉刷新进度显示控件 14 * 15 */ 16 public class MainActivity extends Activity { 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 LinearLayout rootLayout = new LinearLayout(this); 21 rootLayout.setOrientation(LinearLayout.VERTICAL); 22 rootLayout.setLayoutParams(new LinearLayout.LayoutParams( 23 LinearLayout.LayoutParams.MATCH_PARENT, 24 LinearLayout.LayoutParams.MATCH_PARENT)); 25 rootLayout.setGravity(Gravity.CENTER); 26 27 Button btn = new Button(this); 28 btn.setText("展现动画"); 29 30 final MyImgView imgView = new MyImgView(MainActivity.this); 31 imgView.setLayoutParams(new LinearLayout.LayoutParams( 32 LinearLayout.LayoutParams.WRAP_CONTENT, 33 LinearLayout.LayoutParams.WRAP_CONTENT)); 34 imgView.setVisibility(View.GONE); 35 36 rootLayout.addView(btn); 37 rootLayout.addView(imgView); 38 39 setContentView(rootLayout); 40 41 btn.setOnClickListener(new OnClickListener() { 42 43 @Override 44 public void onClick(View arg0) { 45 imgView.setVisibility(View.VISIBLE); 46 } 47 }); 48 } 49 }
这里都是用 自定义代码布局文件,这个个人爱好,也是项目需求。应该也可以看懂的,自定义代码布局可方便 插件代码的 整合;
如上所述,这个动画就完成 了,只在需要的地方设置imgview为显示,动画就会开启,隐藏动画就会被关闭。
为了大家方便演示,就附上代码加图标,不过图标做的不好,呵呵。