界面加载动画(一帧一帧的图片组成的动画)

来源:互联网 发布:mac自带快捷键怎么设置 编辑:程序博客网 时间:2024/06/10 07:13

效果如图所示:

1.准备好所需图片,一帧一帧的所有图片,然后在drawable中新建一个 animation.xml:

<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"    android:oneshot="false">    <item        android:drawable="@mipmap/anim_1"        android:duration="100" />    <item        android:drawable="@mipmap/anim_2"        android:duration="100" />    <item        android:drawable="@mipmap/anim_3"        android:duration="100" />    <item        android:drawable="@mipmap/anim_4"        android:duration="100" />    <item        android:drawable="@mipmap/anim_5"        android:duration="100" />    <item        android:drawable="@mipmap/anim_6"        android:duration="100" />    <item        android:drawable="@mipmap/anim_7"        android:duration="100" />    <item        android:drawable="@mipmap/anim_8"        android:duration="100" />    <item        android:drawable="@mipmap/anim_9"        android:duration="100" />    <item        android:drawable="@mipmap/anim_10"        android:duration="100" />    <item        android:drawable="@mipmap/anim_11"        android:duration="100" />    <item        android:drawable="@mipmap/anim_12"        android:duration="100" />    <item        android:drawable="@mipmap/anim_13"        android:duration="100" />    <item        android:drawable="@mipmap/anim_14"        android:duration="100" />    <item        android:drawable="@mipmap/anim_15"        android:duration="100" />    <item        android:drawable="@mipmap/anim_16"        android:duration="100" />    <item        android:drawable="@mipmap/anim_17"        android:duration="100" />    <item        android:drawable="@mipmap/anim_18"        android:duration="100" />    <item        android:drawable="@mipmap/anim_19"        android:duration="100" />    <item        android:drawable="@mipmap/anim_20"        android:duration="100" />    <item        android:drawable="@mipmap/anim_21"        android:duration="100" />    <item        android:drawable="@mipmap/anim_22"        android:duration="100" />    <item        android:drawable="@mipmap/anim_23"        android:duration="100" />    <item        android:drawable="@mipmap/anim_24"        android:duration="100" />    <item        android:drawable="@mipmap/anim_25"        android:duration="100" />    <item        android:drawable="@mipmap/anim_26"        android:duration="100" />    <item        android:drawable="@mipmap/anim_27"        android:duration="100" />    <item        android:drawable="@mipmap/anim_28"        android:duration="100" />    <item        android:drawable="@mipmap/anim_29"        android:duration="100" />    <item        android:drawable="@mipmap/anim_30"        android:duration="100" />    <item        android:drawable="@mipmap/anim_31"        android:duration="100" />    <item        android:drawable="@mipmap/anim_32"        android:duration="100" />    <item        android:drawable="@mipmap/anim_33"        android:duration="100" />    <item        android:drawable="@mipmap/anim_34"        android:duration="100" />    <item        android:drawable="@mipmap/anim_35"        android:duration="100" />    <item        android:drawable="@mipmap/anim_36"        android:duration="100" />    <item        android:drawable="@mipmap/anim_37"        android:duration="100" />    <item        android:drawable="@mipmap/anim_38"        android:duration="100" />    <item        android:drawable="@mipmap/anim_39"        android:duration="100" /></animation-list>

2.在style里添加一个对话框样式:

<style name="alert_dialog" parent="android:Theme.Dialog">        <item name="android:windowIsFloating">true</item>        <item name="android:windowIsTranslucent">false</item>        <item name="android:windowNoTitle">true</item>        <item name="android:windowFullscreen">false</item>        <item name="android:windowBackground">@android:color/transparent</item>        <item name="android:windowAnimationStyle">@null</item>        <item name="android:backgroundDimEnabled">true</item>        <item name="android:backgroundDimAmount">0.4</item>    </style>

3.对话框布局文件:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:id="@+id/img"        android:layout_centerInParent="true"        android:layout_width="60dp"        android:layout_height="60dp" />    <TextView        android:layout_centerInParent="true"        android:layout_below="@+id/img"        android:layout_marginTop="10dp"        android:text="正在加载..."        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></RelativeLayout>

4.自定义LoadingDialog extends Dialog:

public class LoadingDialog extends Dialog {    private AnimationDrawable anim;    public LoadingDialog(Context context) {        super(context, R.style.alert_dialog);// R.style.alert_dialog自定义的style    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.dialog_animation);        ImageView img = (ImageView) findViewById(R.id.img);        img.setImageResource(R.drawable.animation);        anim = (AnimationDrawable) img.getDrawable();        anim.start();    }    @Override    public void dismiss() {        super.dismiss();        anim.stop();    }    @Override    public void show() {        super.show();        WindowManager windowManager = getWindow().getWindowManager();        Display display = windowManager.getDefaultDisplay();        WindowManager.LayoutParams lp = this.getWindow().getAttributes();        lp.width = (int)(display.getWidth());        lp.height = (int)(display.getHeight());        this.getWindow().setAttributes(lp);    }}

5.activity中直接使用此对话框(此处使用一个延迟定时来模拟获取数据的整个过程,先把文字隐藏,等时间到了后显示出来):

public class HomeActivity extends AppCompatActivity {    private LoadingDialog dialog;    private TextView tv_text;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_home);        tv_text = (TextView) this.findViewById(R.id.tv_text);        //显示加载动画        dialog = new LoadingDialog(HomeActivity.this);        dialog.show();        new Thread(new Runnable() {            @Override            public void run() {                try {                    Thread.sleep(10000);                    runOnUiThread(new Runnable() {                        @Override                        public void run() {                            //取消加载动画                            dialog.dismiss();                            tv_text.setVisibility(View.VISIBLE);                        }                    });                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }).start();    }}

补充:

这个帖子讲得很好,还介绍了drawable其他的标签
Android样式的开发:drawable汇总篇 - 安卓 - 伯乐在线 http://android.jobbole.com/82117/

原创粉丝点击