Android中如何用layer-list和rotate实现加载中Spinner动画

来源:Nodejs社区作者:河北彩花头衔:网络博主
导读:本期聚焦于小伙伴创作的《Android中如何用layer-list和rotate实现加载中Spinner动画》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Android中如何用layer-list和rotate实现加载中Spinner动画》有用,将其分享出去将是对创作者最好的鼓励。

在Android应用开发中,加载中动画是提升用户交互体验的重要元素,Spinner样式的旋转加载动画因为简洁直观被广泛使用。通过XML的layer-list和rotate标签组合,不需要编写复杂的逻辑代码,就可以快速实现这类动画效果。

Android中如何用layer-list和rotate实现加载中Spinner动画

layer-list与rotate的基础概念

layer-list的作用

layer-list是Android XML drawable中的一种,它的作用是把多个drawable按层级叠加在一起,类似图层的概念。每一个<item>标签代表一个图层,后定义的图层会显示在先定义的图层上方,我们可以通过这个特性组合出复杂的图形效果。

rotate标签的作用

rotate是Android中的动画标签,用于定义旋转动画效果,它可以指定旋转的中心点、旋转角度、旋转时长等属性,既可以作用在单个drawable上,也可以和layer-list结合实现整体旋转效果。

实现加载中Spinner动画的步骤

第一步:创建基础图形图层

我们首先用layer-list定义Spinner的基础图形,这里用多个半圆弧叠加模拟常见的Spinner样式,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 底层灰色圆环 -->
    <item>
        <shape android:shape="ring"
            android:innerRadiusRatio="3"
            android:thicknessRatio="8"
            android:useLevel="false">
            <solid android:color="#FFE0E0E0" />
        </shape>
    </item>
    <!-- 上层进度弧 -->
    <item>
        <rotate
            android:fromDegrees="0"
            android:toDegrees="360"
            android:pivotX="50%"
            android:pivotY="50%">
            <shape android:shape="ring"
                android:innerRadiusRatio="3"
                android:thicknessRatio="8"
                android:useLevel="false">
                <gradient
                    android:startColor="#FF3F51B5"
                    android:endColor="#FF3F51B5"
                    android:angle="0" />
            </shape>
        </rotate>
    </item>
</layer-list>

第二步:定义旋转动画属性

上面的代码中,我们已经给上层的进度弧添加了rotate标签,下面解释关键属性的含义:

  • fromDegrees:旋转起始角度,0表示从不旋转开始
  • toDegrees:旋转结束角度,360表示旋转一周
  • pivotX:旋转中心点的X坐标,50%表示中心位置
  • pivotY:旋转中心点的Y坐标,50%表示中心位置

第三步:将动画应用到View上

把上面的XML文件保存为loading_spinner.xml,放在res/drawable目录下,然后在布局文件中通过ImageView引用这个drawable,同时给ImageView添加旋转动画:

<ImageView
    android:id="@+id/loading_iv"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_gravity="center"
    android:src="@drawable/loading_spinner" />

接着在Activity或Fragment中给ImageView添加属性动画,实现持续旋转效果:

import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView loadingIv = findViewById(R.id.loading_iv);
        // 创建旋转动画,旋转属性为rotation,从0到360度,时长1000毫秒
        ObjectAnimator animator = ObjectAnimator.ofFloat(loadingIv, "rotation", 0f, 360f);
        animator.setDuration(1000);
        // 设置动画重复次数为无限次
        animator.setRepeatCount(ObjectAnimator.INFINITE);
        // 设置动画重复模式为重新开始
        animator.setRepeatMode(ObjectAnimator.RESTART);
        animator.start();
    }
}

自定义动画效果

我们可以根据需求调整动画的相关属性:

  • 调整setDuration的参数可以改变旋转速度,数值越小旋转越快
  • 修改layer-list中shape的innerRadiusRatiothicknessRatio可以调整圆环的大小和粗细
  • 修改solid或gradient的color属性可以调整动画的颜色,适配应用的主题色

注意事项

需要注意的是,如果直接在layer-list的rotate标签中设置android:toDegrees是无法实现自动循环的,必须配合属性动画或者补间动画来控制旋转循环。另外,使用ring形状的时候一定要设置android:useLevel="false",否则图形可能无法正常显示。

Androidlayer-listrotateSpinner动画修改时间:2026-07-04 06:57:12

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。