Android开发——自定义加载动画

本文介绍了如何在Android中创建自定义加载动画,包括建立动画布局文件、Tween动画、Dialog的style设置,以及如何显示和关闭自定义Dialog。通过设置布局和动画效果,实现了加载动画与文字的重合展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文中的动画,类属于Tween动画。
首先,看效果图。
动画效果图

1. 建立动画布局文件

路径:res\layout\loading_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialog_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:alpha="1"
    android:gravity="center"
    android:minHeight="80dp"
    android:minWidth="80dp"
    android:orientation="vertical"
    android:padding="10dp" >

    <ImageView
        android:id="@+id/img_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/loading"
        android:contentDescription="@null"
        android:layout_centerInParent="true" />

    <TextView
        android:id="@+id/text_tip"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:gravity="center_horizontal"
        android:layout_centerInParent="true"
        android:textColor="@android:color/primary_text_light" />

</RelativeLayout>

注意:布局文件中,两个控件ImageView与TextView的位置android:layout_centerInParent=”true”是关键,只有这样,图片与文字才会重合。

2. 建立Tween动画文件

路径:res\anim\rotating.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <!--
    旋转动画
    1.每1.5秒旋转一周
    2.线性旋转(匀速)
    3.转轴位于屏幕中心
    4.repeatCount设置为-1,声明为不断重复
    5.repeateMode设置为restart,声明为重新开始
    -->
    <rotate
        android:duration="1500"
        android:fromDegrees="0"
        android:interpolator="@android:anim/linear_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="-1"
        android:repeatMode="restart"
        android:startOffset="-1"
        android:toDegrees="+360" />

</set>

3. 设置Dialog的style

路径:res\values\styles.xml
styles.xml文件中添加如下代码段,规定要显示的Dialog的效果。

<!-- 继承于Dialog主题的style -->
    <style name="loading" parent="android:style/Theme.Dialog">

        <!-- Dialog的windowFrame框为无 -->
        <item name="android:windowFrame">@null</item>
        <!-- Dialog无标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- Dialog的背景 -->
        <item name="android:windowBackground">@color/transparent</item>
        <!-- Dialog是否悬浮显示 -->
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

4. 创建自定义Dialog

继承Android系统提供的Dialog,创建自定义Dialog。
在该自定义Dialog中,需要引用动画布局文件loading_dialog.xml

@SuppressLint("InflateParams")
public class LoadingDialog extends Dialog {

    private RelativeLayout dialogView;// 显示动画
    private ImageView loadingImg;// 动画
    private TextView tipText;// 文本

    public LoadingDialog(Context context, int themeResId, String msg) {
        /*
         * 这里是自定义Dialog显示效果的关键,
         * 一定要把themeResId传进去。
         */
        super(context, themeResId);
        // 加载布局文件
        View view = LayoutInflater.from(context).inflate(R.layout.loading_dialog, null, false);
        // 获取布局文件上的控件
        dialogView = (RelativeLayout) view.findViewById(R.id.dialog_view);
        loadingImg = (ImageView) view.findViewById(R.id.img_loading);
        tipText = (TextView) view.findViewById(R.id.text_tip);
        // 加载动画效果
        Animation rotating = AnimationUtils.loadAnimation(context, R.anim.rotating);
        // 将动画加载到 ImageView 上,开启动画
        loadingImg.startAnimation(rotating);
        // 添加文本提示
        tipText.setText(msg);
        // 设置动画为不可取消
        setCancelable(false);
        // 将动画设置在相应的位置
        setContentView(dialogView, 
                new LayoutParams(
                        LayoutParams.MATCH_PARENT, 
                        LayoutParams.MATCH_PARENT));


    }

}

5. 显示与取消显示Dialog

在要显示动画的地方,引用自定义style,创建一个Dialog对象。

// 上下文环境,Dialog的style,提示文本
dialog = new LoadingDialog(this, R.style.loading, "加载中……");

然后,显示Dialog。

dialog.show();

在合适的地方,关闭Dialog。

dialog.cancel();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值