博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Glide 知识梳理(4) 自定义animate
阅读量:6876 次
发布时间:2019-06-26

本文共 2139 字,大约阅读时间需要 7 分钟。

一、概述

在之前基础用法的文章中,我们介绍了使用crossFade来进行placeHolder和要加载的图片之间渐进渐出的动画,今天,我们来介绍一个更加高级的用法 - animate()

animate有以下两个重载方法,我们可以给它指定一个R.anim下的动画资源文件,或者传入一个实现了ViewPropertyAnimation.Animator接口的实例,来自定义自己的动画。

  • public DrawableRequestBuilder<ModelType> animate(int animationId)
  • public DrawableRequestBuilder<ModelType> animate(ViewPropertyAnimation.Animator animator)

二、示例

2.1 在xml中定义动画

xml中使用自定的动画很简单, 首先,我们在R.anim文件夹下定义一个动画资源文件,R.anim.glide_animate

复制代码

然后,我们调用animate把这个资源文件的id传进去,这样,当图片加载完成之后,就会以一个慢慢放大且渐显的方式出现了。

public void loadAnimate(View view) {        Glide.with(this)                .load("http://i.imgur.com/DvpvklR.png")                .diskCacheStrategy(DiskCacheStrategy.NONE)                .animate(R.anim.glide_animate)                .into(mImageView);    }复制代码

2.2 通过ViewPropertyAnimation.Animator定义动画

当我们的容器是一个ImageView时,用上面的方式是最方便的。然后回想一下,之前我们介绍过的自定义Target文章中,我们谈到了ViewTarget,也就是我们定义了一个自定义的View,那么这时候如果我们希望这个自定义View中的各个组件可以用不同的动画方式展现出来,那么上面这种用xml定义动画执行过程就不适用了,下面我们展示一下继承于ViewPropertyAnimation.Animator来进行动画。

private class MyAnimator implements ViewPropertyAnimation.Animator {        @Override        public void animate(View view) {            final View finalView = view;            ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {                @Override                public void onAnimationUpdate(ValueAnimator animation) {                    float value = (float) animation.getAnimatedValue();                    finalView.setScaleX((float) (0.5 + 0.5 * value));                    finalView.setScaleY((float) (0.5 + 0.5 * value));                    finalView.setAlpha(value);                }            });            valueAnimator.start();        }    }复制代码

然后,我们实例化一个MyAnimator,通过animate()传入:

public void loadAnimator(View view) {        MyAnimator myAnimator = new MyAnimator();        Glide.with(this)                .load("http://i.imgur.com/DvpvklR.png")                .diskCacheStrategy(DiskCacheStrategy.NONE)                .animate(myAnimator)                .into(mImageView);    }复制代码

转载地址:http://eygfl.baihongyu.com/

你可能感兴趣的文章
eclipse启动失败
查看>>
(已解决!)精选30道Java笔试题解答
查看>>
【Python之旅】第七篇(三):使用Redis订阅服务
查看>>
linux远程桌面链接windows
查看>>
TrendMicro:新的APT***针对亚洲和欧洲政府组织,包括中国媒体机构
查看>>
C语言中sizeof与strlen区别2
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
UIWebView加载html网页时使用缓存和清空缓存
查看>>
我的友情链接
查看>>
设计模式学习笔记(六)之策略模式(Strategy)
查看>>
python运行spark脚本程序
查看>>
我的友情链接
查看>>
通过libvirt使用ceph块设备
查看>>
优秀交互设计师成长指南
查看>>
SDN网络系统之MiniNet的安装与使用
查看>>
java的Iterator和listIterator的区别
查看>>
服务器虚拟化的好处
查看>>
AxureRP7.0基础教程系列 部件详解 表格Tabel
查看>>