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

相关推荐

  • dhtml怎么改变速度

    在DHTML(动态HTML)中,改变页面元素的速度通常涉及到动画效果的创建和控制,这些动画可以是元素的位置变化、大小调整、透明度变化等,要实现这样的效果,开发者通常会使用JavaScript结合CSS来操作DOM(文档对象模型),以下是一些关键技术和方法的介绍:1. 使用CSS过渡(Transitions)CSS过渡是改变元素样式属性……

    2024-04-10
    0202
  • linux获取毫秒时间戳命令

    在Linux系统中,我们可以使用多种方法来获取毫秒时间戳,下面将介绍两种常用的方法:使用`gettimeofday()`函数和使用date命令结合`+%s%3N`格式化字符串,这两种方法都可以满足大多数需求,但它们之间可能存在一些微小的差异,方法一:使用gettimeofday()函数`gettimeofday()`函数是C语言中的一个标准库函数,它可以在Linux系统中获取当前的精确时间戳,

    2023-12-10
    0396
  • ppt已经去掉效果为什么还有动画效果

    当我们在制作PPT时,经常会使用各种动画效果来增强展示的吸引力,有时候我们可能会发现,即使我们已经去掉了所有的动画效果,PPT仍然看起来有些“卡顿”,这是因为PPT的动画效果不仅包括我们在幻灯片上看到的那些明显的动画,还包括一些隐藏的、用于优化性能和提高用户体验的效果,这些效果虽然不会直接影响到我们的演示,但是它们会占用一定的系统资源……

    2024-03-17
    0201
  • html css怎么做动画

    HTML CSS动画简介HTML和CSS是构建网页的两大核心技术,而动画则是让网页更具生动性和吸引力的重要手段,通过使用HTML和CSS,我们可以轻松地为网页元素添加各种动画效果,从简单的淡入淡出到复杂的旋转翻转,都可以实现,本文将介绍如何使用HTML和CSS制作动画,并提供一些实用的技巧和示例代码。HTML CSS动画实现原理1、H……

    2024-01-27
    0120
  • html5wap网站模板动画_网站模板 html

    各位访客大家好!今天小编关注到一个比较有意思的话题,就是关于html5wap网站模板动画的问题,于是小编就整理了几个相关介绍的解答,让我们一起看看吧,希望对你有帮助怎样通过HTML5让移动APP页面有动效?(二)h5元素本身的位移、缩放,控制css属性即可,left、right、top、bottom,width、height,另外使用transform可以完成更复杂的变化。透明度属性可以完成渐隐渐现效果,切换background-image属性,background-color属性。

    2023-12-08
    0135
  • 手机wps为什么没有动画效果了

    手机WPS没有动画效果的原因主要有以下几点:1、技术限制我们需要了解的是,手机的硬件和软件环境与电脑有很大的不同,手机的处理器、内存和图形处理能力都远低于电脑,这使得手机无法运行一些复杂的动画效果,手机的屏幕尺寸也比电脑小很多,这使得在手机上显示复杂的动画效果变得困难。2、用户体验手机的使用环境和电脑也有很大的不同,手机是移动设备,用……

    2024-02-27
    0407

发表回复

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

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