Android 图片Loading旋转动画效果

使用场景:在数据请求或者一些加载的页面中,总需要一些过度的动画效果,很多时候我们都可以在图片中间加一个loading的旋转图片,以前也做过,今天做的时候噼里啪啦敲了半天结果运行没效果,所以今天总结下这个啷个做的。

例子:我们要加载一个webView,需要在加载前的空白页面中间加一个旋转的loading图片,结束后就消失。

布局xml:就是一个全屏的webView+居中的loading图片

第一个方法:使用Android自带的 AnimationUtils.loadAnimation

代码:

anim文件下的动画xml:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"//旋转的起始角度
    android:toDegrees="359"//旋转的终点角度
    android:pivotX="50%"//旋转的X中心,50%就是中间
    android:pivotY="50%"//旋转的y中心,50%就是中间
    android:duration="1000"//每次动画执行的时间,越小转的越快
    android:repeatCount="-1"//执行次数,-1就是无限次
 />
url = "www.baidu.com"
        url?.let { webView.loadUrl(it) }
        context?.let {
            val a = AnimationUtils.loadAnimation(it, R.anim.blv_loading_white_policy)
            a.interpolator = LinearInterpolator()//匀速执行
            webViewLoading.startAnimation(a)//view.startAnimation 执行动画
        }
        webView.onLoading = { _, isFinish ->//只是个回调面,进度达到100%就结束动画,图片隐藏
            if (isFinish) {
                webViewLoading.clearAnimation()
                webViewLoading.visibility = View.GONE
            }
        }

关键属性:

1.interpolator:俗称插值器,负责控制动画变化的速率,使得基本的动画能够以匀速、加速、减速、抛物线等等各种变化。

  • AccelerateDecelerateInterpolator,效果是开始和结束的速率比较慢,中间加速;
  • AccelerateInterpolator,效果是开始速率比较慢,后面加速;
  • DecelerateInterpolator,效果是开始速率比较快,后面减速;
  • LinearInterpolator,效果是速率是恒定的;
  • AnticipateInterpolator,效果是开始向后甩,然后向前;
  • AnticipateOvershootInterpolator,效果是开始向后甩,冲到目标值,最后又回到最终值;
  • OvershootInterpolator,效果开始向前甩,冲到目标值,最后又回到了最终值;
  • BounceInterpolator,效果是在结束时反弹;
  • CycleInterpolator,效果是循环播放,速率是正弦曲线;
  • TimeInterpolator,一个接口,可以自定义插值器。

2.clearAnimation(),一定记得要调用,不然会使得webViewLoading.visibility = View.GONE这句话无效,他还是会展示

3.animation.setFillAfter(true);//动画终止时停留在最后一帧,如果设置为false,则会回到最开始的位置,有些场景会很不好看,例如网易云播放时的旋转图片。

第二个方法:使用RotateAnimation

代码:这儿的webViewLoading为一个ImageView,这儿就不需要给一个anim文件了,直接在xml里配置了src属性,就是一张普通的图片。

  override fun initView() {
        url = UTownRepo.userPrivatePolicyHtmlUrl
        url?.let { webView.loadUrl(it) }
        initAndStartAnim()
        webView.onLoading = { progress, isFinish ->
            if (isFinish) {
                stopAnim()
            }
        }
    }

    override fun onDestroyView() {
        webView.destroy()
        super.onDestroyView()
    }

    private fun initAndStartAnim() {
        // 创建旋转动画
        animation = RotateAnimation(
            0f,
            360f,
            Animation.RELATIVE_TO_SELF,
            0.5f,
            Animation.RELATIVE_TO_SELF,
            0.5f
        )
        animation!!.duration = 1000
        // 动画的重复次数
        animation!!.repeatCount = Animation.INFINITE
        // 设置为true,动画转化结束后被应用
        animation!!.fillAfter = true
        animation!!.interpolator = LinearInterpolator()
        // 开始动画
        webViewLoading.startAnimation(animation)
    }

    private fun stopAnim() {
        if (animation != null) {
            animation?.cancel()
        }
        animation = null
        webViewLoading.clearAnimation()
        webViewLoading.visibility = View.GONE

    }

eg:animation只是操作View 的位图表示(bitmap representation),而不是真正的改变View的位置,位图就是bitmap,关于bitmap,可以去好好学习一下!

Android位图总结_weixin_34055910的博客-CSDN博客

Android开发中Bitmap的全面总结_徐福记456的博客-CSDN博客_android开发bitmap

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Android loading动画是指在数据加载过程中显示出来的一种动画效果。它的作用是告知用户当前应用程序正在加载数据,以增加用户等待过程的友好性和乐趣。 Android提供了多种方式来实现loading动画,其中比较常见的是使用ProgressBar或ProgressDialog。ProgressBar是一种简单的圆形或水平进度条,它会展示出当前加载的进度。ProgressDialog是一个对话框式的加载动画,可以显示文字描述和进度。 除了ProgressBar和ProgressDialog之外,开发者还可以通过自定义动画来实现loading效果。可以使用帧动画,在不同帧之间切换来达到动画效果;或者使用属性动画,通过修改视图的属性值来实现动画效果。 为了提供更好的用户体验,一般在启动耗时操作之前,都会显示loading动画。当数据加载完毕时,loading动画会消失,显示加载结果。如果加载失败,也可以显示失败页面或者提示用户重新加载。 在设计loading动画时,需要注意时间的控制和动画的流畅性。加载动画需要有一个合理的持续时间,既不能太短让用户无法察觉,也不能太长让用户感到拖延。动画的流畅性也需要保证,以保证用户的操作流程不会因为阻塞效果而受到干扰。 总之,Android loading动画是一种在数据加载过程中用于提升用户体验的动画效果。通过使用ProgressBar、ProgressDialog或自定义动画,可以向用户展示数据加载的进度和结果。合理设计动画的持续时间和流畅性,可以使用户在等待过程中感到更加舒心和愉悦。 ### 回答2: Android loading动画Android应用程序中常见的一种特效,用于向用户展示正在加载或处理数据的过程。通过适当的加载动画,可以增加用户等待时的愉悦感,提升用户体验。 在Android中,我们可以使用一些内置的动画效果,如旋转、缩放和淡入淡出等。也可以通过自定义动画来实现更加个性化的加载效果。 常见的加载动画效果包括: 1.旋转动画:将一个图标或者图片进行旋转,表示正在加载或处理数据。可以让用户感觉到应用正在不断努力地工作。 2.进度条动画:通过展示一个进度条的变化,来告知用户处理的进度。可以根据实际的加载进度,调整进度条的长度或者颜色。 3.渐变动画:将一个控件或者图片的透明度进行渐变,从而表现出渐进式的加载过程。 4.缩放动画:通过控制控件或者图片的缩放比例,来展示加载的过程。可以让用户感受到应用正在逐渐呈现出来。 5.组合动画:将多个动画效果组合在一起,形成更加丰富多样的加载效果。可以根据具体的应用场景,设定不同的动画组合。 在实现加载动画时,可以使用Android提供的动画库,如ValueAnimator、ObjectAnimator等,以及属性动画和帧动画等技术。可以通过在xml文件中定义动画效果,或者在代码中动态设置动画属性,来实现加载动画效果。 总而言之,通过精心设计和选择适合的加载动画效果,可以提升用户对应用的体验和满意度,使用户在等待时感到愉悦和放松。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&岁月不待人&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值