教你怎么自定义Dialog加载动画(仿苹果菊花加载动画效果)
1.需要两个Drawale
a) load_bg_drawable.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="false">
<shape>
<corners android:radius="3dp"/>
<solid android:color="#6d000000"/>
</shape>
</item>
</selector>
b) load_animal.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
根标签下,通过item标签对动画中的每一个图片进行声明
android:duration 表示展示所用的该图片的时间长度
-->
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false"
>
<item android:drawable="@mipmap/loading_01" android:duration="150"></item>
<item android:drawable="@mipmap/loading_02" android:duration="150"></item>
<item android:drawable="@mipmap/loading_03" android:duration="150"></item>
<item android:drawable="@mipmap/loading_04" android:duration="150"></item>
<item android:drawable="@mipmap/loading_05" android:duration="150"></item>
<item android:drawable="@mipmap/loading_06" android:duration="150"></item>
<item android:drawable="@mipmap/loading_07" android:duration="150"></item>
<item android:drawable="@mipmap/loading_08" android:duration="150"></item>
<item android:drawable="@mipmap/loading_09" android:duration="150"></item>
<item android:drawable="@mipmap/loading_10" android:duration="150"></item>
<item android:drawable="@mipmap/loading_11" android:duration="150"></item>
<item android:drawable="@mipmap/loading_12" android:duration="150"></item>
</animation-list>
c)需要一个loading_layout.xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:gravity="center"
android:orientation="vertical"
android:background="@drawable/loading_bg_drawable"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:paddingRight="30dp">
<ImageView
android:id="@+id/img_show"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@drawable/loading_animal"/>
<TextView
android:id="@+id/tv_load_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="正在登录"
android:textColor="#fff"
android:textSize="16sp" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
d)新一个LoadDialog类
public class LoadDialog extends Dialog{
public Context context;
private TextView mtvLoadmsg;
private ImageView mImageView;
public LoadDialog(Context context) {
super(context, R.style.ShareDialog);
this.context = context;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loading_layout);
mtvLoadmsg = (TextView) findViewById(R.id.tv_load_msg);
mImageView=(ImageView)findViewById(R.id.img_show);
mImageView.setBackgroundResource(R.drawable.loading_animal);
AnimationDrawable animationDrawable= (AnimationDrawable) mImageView.getBackground();
animationDrawable.start();
}
public void setLoadMsg(String msg)
{
if(mtvLoadmsg != null)
{
mtvLoadmsg.setText(msg);
}
}
}
使用方法:
public LoadDialog loadDialog;
public void showLoadDialog(String msg) {
if (loadDialog == null) {
loadDialog = new LoadDialog(this);
}
loadDialog.show();
loadDialog.setLoadMsg(msg);
}
public void hideLoadDialog() {
if (loadDialog != null)
loadDialog.dismiss();
}