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为显示,动画就会开启,隐藏动画就会被关闭。
具体内容到此为止,希望大家能够喜欢。