android怎么实现加载动画效果

什么是加载动画效果

加载动画效果,顾名思义,就是在程序加载数据或者页面时,给用户一个视觉上的反馈,让用户知道当前操作正在进行中,从而提高用户体验,在Android开发中,实现加载动画效果可以帮助我们提升应用的交互体验,让用户在使用过程中感受到更加流畅的操作。

如何实现加载动画效果

1、使用ViewPager2和Fragment实现翻页动画

android怎么实现加载动画效果

ViewPager2是Android官方推荐的一个高性能的View组件,它可以实现类似于ViewPager的滑动翻页效果,通过结合Fragment的使用,我们可以轻松地为ViewPager2添加自定义的翻页动画效果。

需要在项目的build.gradle文件中添加ViewPager2的依赖:

dependencies {
    implementation 'androidx.viewpager2:viewpager2:1.0.0'
}

创建一个自定义的Fragment类,继承自Fragment,并重写onCreateView方法,在其中绘制自定义的翻页动画效果,我们可以创建一个简单的淡入淡出动画效果:

public class CustomFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_custom, container, false);
        ImageView imageView = view.findViewById(R.id.imageView);
        imageView.setAlpha(0f); // 初始状态透明度为0
        return view;
    }
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        new AnimatorListenerAdapter() {
            @Override
            public void onAnimationStart(Animator animation) {
                imageView.setAlpha(1f); // 开始动画时设置透明度为1,即完全显示出来
            }
        }.startOnAnimation(view); // 为View设置动画监听器
    }
}

接下来,在Activity中使用ViewPager2和自定义的Fragment:

android怎么实现加载动画效果

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewPager2 viewPager2 = findViewById(R.id.viewPager2);
        viewPager2.setAdapter(new CustomFragmentAdapter()); // 为ViewPager2设置适配器,包含自定义Fragment实例列表
    }
}

这样,当用户滑动ViewPager2时,就会看到自定义的淡入淡出动画效果,当然,你可以根据需要替换为其他类型的动画效果。

2、使用Handler和Runnable实现定时刷新动画效果

另一种实现加载动画效果的方法是使用Handler和Runnable结合定时任务来实现,这种方法的优点是简单易用,但缺点是性能相对较差。

在Activity或Fragment中创建一个Handler对象:

android怎么实现加载动画效果

private static final int SHOW_LOADING_ANIMATION = R.anim.show_loading_animation; // 显示加载动画的资源ID
private static final int HIDE_LOADING_ANIMATION = R.anim.hide_loading_animation; // 隐藏加载动画的资源ID
private static final long SHOW_LOADING_DELAY = 1000; // 显示加载动画的延迟时间(毫秒)
private static final long HIDE_LOADING_DELAY = 500; // 隐藏加载动画的延迟时间(毫秒)
private static final int SHOW_LOADING_DURATION = 300; // 显示加载动画的持续时间(毫秒)
private static final int HIDE_LOADING_DURATION = 100; // 隐藏加载动画的持续时间(毫秒)
private static final int REMAINING_RETRY_TIMES = 3; // 每次失败后重新尝试的次数限制
private static final long RETRY_INTERVAL = 1000; // 每次重新尝试的时间间隔(毫秒)
private boolean isLoading = false; // 是否正在显示加载动画的状态标志位
private int remainingRetryTimes = REMAINING_RETRY_TIMES; // 每次失败后重新尝试的次数剩余值
private long startTime = System.currentTimeMillis(); // 最后一次请求开始的时间戳(毫秒)
private long currentDelayTime = SHOW_LOADING_DELAY; // 目前等待显示加载动画的时间间隔(毫秒)
private final Object lock = new Object(); // 用于同步的对象锁
private boolean isShowingLoadingAnimation = false; // 是否正在显示加载动画的状态标志位(内部使用)
private boolean hasFinishedLoading = false; // 是否已经完成加载的状态标志位(内部使用)
private AnimationDrawable loadingAnimationDrawable; // 用于显示加载动画的AnimationDrawable对象(内部使用)
private AnimationHandler animationHandler; // AnimationHandler对象,用于处理定时任务(内部使用)

接下来,定义一个AnimationHandler类,继承自Handler<Void>:

private class AnimationHandler extends Handler<Void> {
    private static final int SHOW_LOADING_ANIMATION = R.anim.show_loading_animation; // 显示加载动画的资源ID
    private static final int HIDE_LOADING_ANIMATION = R.anim.hide_loading_animation; // 隐藏加载动画的资源ID
    private static final long SHOW_LOADING_DELAY = SHOW_LOADING_DELAY * (remainingRetryTimes + (remainingRetryTimes % REMAINING_RETRY_TIMES == REMAINING_RETRY_TIMES && remainingRetryTimes > REMAINING_RETRY_TIMES)); // 根据剩余重试次数计算显示或隐藏加载动画的时间间隔(毫秒)
    private static final long HIDE_LOADING_DELAY = HIDE_LOADING_DELAY * (remainingRetryTimes + (remainingRetryTimes % REMAINING_RETRY_TIMES == REMAINING_RETRY_TIMES && remainingRetryTimes > REMAINING_RETRY_TIMES)); // 根据剩余重试次数计算显示或隐藏加载动画的时间间隔(毫秒)
    private static final int SHOW_LOADING_DURATION = SHOW_LOADING_DURATION * (remainingRetryTimes + (remainingRetryTimes % REMAINING_RETRY_TIMES == REMAINING_RETRY_TIMES && remainingRetryTimes > REMAINING_RETRY_TIMES)); // 根据剩余重试次数计算显示或隐藏加载动画的持续时间(毫秒)
    private static final int HIDE_LOADING_DURATION = HIDE_LOADING_DURATION * (remainingRetryTimes + (remainingRetryTimes % REMAINING_RETRY_TIMES == REMAINING_RETRY_TIMES && remainingRetryTimes > REMAINING_RETRY_TIMES)); // 根据剩余重试次数计算显示或隐藏加载动画的持续时间(毫秒)

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/159944.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2023-12-23 19:37
Next 2023-12-23 19:39

相关推荐

  • html表单制作教程-html表单特效

    欢迎进入本站!本篇文章将分享html表单特效,总结了几点有关html表单制作教程的解释说明,让我们继续往下看吧!谁知道在HTML的表单里的文本输入框的这种效果(弧形拐角,红色边框)怎样...1、border-radius可以给一个值、两个值、四个值。一个值表示四个角都是一样,两个值的话,的一个值表示左上、右下,第二是值表示右上、左下。四个值就是依次是左上、右上、右下、左下。

    2023-11-25
    0129
  • html转跳代码

    HTML怎么才能让代码跳舞要实现HTML代码“跳舞”,我们可以使用CSS动画(CSS Animation)或者JavaScript动画(JavaScript Animation)来实现,这里我们主要介绍CSS动画的实现方法。1、创建一个HTML文件,添加一个&lt;div&gt;元素,用于显示跳舞的效果。&lt……

    2024-01-16
    0179
  • html5加载动画特效-html5动画特效

    各位访客大家好!今天小编关注到一个比较有意思的话题,就是关于html5动画特效的问题,于是小编就整理了几个相关介绍的解答,让我们一起看看吧,希望对你有帮助如何用HTML5的Canvas制作3D动画效果1、通用类的提取:动画对象与帧对象 灵与肉的结合:便于拆卸的运动方程 进度条的实现:canvas的图片预加载 demo测试:通过一个demo测试框架 这一节我们先来说说通用类的提取。

    2023-12-15
    0132
  • css3html5动画效果「css3实现动画效果常用方法」

    各位朋友,大家好!小编整理了有关css3html5动画效果的解答,顺便拓展几个相关知识点,希望能解决你的问题,我们现在开始阅读吧!HTML5如何在网页中实现3D效果?1、。常用面板中插入一个ActiveX插件,并调整大小 2。2、在开发过程中,如果当前元素属于body的子元素,并且想要应用3D变形,可以在body和当前元素之间再嵌套一层结构,对这一层元素应用3D变形。触发方式二:直接使用CSS3变形语法。

    2023-11-24
    0235
  • html遮罩动画怎么停下来

    HTML遮罩动画是一种常见的网页设计技术,它可以在网页上创建动态的视觉效果,有时候我们可能需要停止这些动画,例如当用户点击某个按钮或者达到某个条件时,HTML遮罩动画怎么停下来呢?本文将详细介绍如何实现这一功能。1. 使用CSS动画控制属性要停止HTML遮罩动画,我们可以使用CSS动画控制属性,这些属性包括animation-play……

    2024-03-20
    0159
  • html5canvas动画效果

    大家好呀!今天小编发现了html5canvas动画效果的有趣问题,来给大家解答一下,别忘了关注本站哦,现在我们开始阅读吧!HTML5用canvas怎么实现动画效果1、。常用面板中插入一个ActiveX插件,并调整大小 2。2、做一个逐帧动画必不可缺的就是需要一张等间距的“动画分解逐帧图片.png”,之后我们就可以通过修改 background-position 来完成一个“逐帧动画”。当然我们也可以通过设置特殊的图片,来完成一些特殊的效果。

    2023-12-15
    0130

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入