android取代帧动画,android动画(一)——帧动画

一个月没写点东西,最近闲下来打算回顾一下android动画的知识,俗话说温故而知新,就算是简单的东西也要反复的记忆,才能够不会遗忘,废话不多说了,回顾一下常用的动画类型。

常用动画类型

帧动画

帧动画,顾名思义就是把一系列图片像放电影一样连续的播放,那就要求图片衔接有紧凑感,哈哈。可以跟美工“好好聊聊”了。

补间动画

补间动画,实现动画的效果是通过对view进行一些图形变换,如平移,旋转,缩放大小,透明度改变。view形式改变,自身的事件并未改变(此处稍后会列举实例去解释)

属性动画

属性动画,“属性”,看到这两个字应该就能理解到view的变化对自身固有属性产生了影响,与补间动画不同的是,view形式改变,自身的事件也发生改变(如果该view添加了点击事件,那么触发点击事件的位置应该是在view变化后的最终位置)

动画实例分析

帧动画FrameAnimation

这里我们拿一个项目中常用的例子来演示,为了增加用户体验,通常在网络加载过程中,我们会给用户显示一个loading的动画以示友好,那好,我们就用帧动画来实现这个效果。

首先,我们准备好一组动画loading要用的图片 loading_animlist.xml

这里要注意的是,animation-list这个tag只有在drawable文件下的xml中才能使用,duration是该帧图片所用的时间毫秒数

其次,需要给这组图片准备一个播放的载体,我们用imageview,这里我是直接在mainactivity的xml中放了一个图片

最后,在MainActivy的onCreate()方法中启动该动画

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mImageView = (ImageView) findViewById(R.id.iv_load);

mImageView.setImageResource(R.drawable.loading_animlist);

AnimationDrawable animationDrawable = (AnimationDrawable) mImageView.getDrawable();

animationDrawable.start();

}

这样就完了么???

你会发现为什么动画不会动,而是静止的呢,如果有经验的朋友会发现,此时window还没初始化完成,那么帧动画是是没有找到该window的,(这里如果用过popupwindow的朋友会知道的),那有什么方法能够解决呢?android系统其实给我们提供了一个onWindowFocusChanged()的方法用来判断是否window初始化完成,那改代码吧,添加这个方法

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mImageView = (ImageView) findViewById(R.id.iv_load);

}

@Override

public void onWindowFocusChanged(boolean hasFocus) {

super.onWindowFocusChanged(hasFocus);

mImageView.setImageResource(R.drawable.loading_animlist);

AnimationDrawable animationDrawable = (AnimationDrawable) mImageView.getDrawable();

animationDrawable.start();

}

65749833b645eb419a4e75ae48af365f.gif

另外还有的常用方法

//停止动画

animationDrawable.stop();

//动画是否正在播放

animationDrawable.isRunning();

//设置是否循环播放

animationDrawable.setOneShot(true);

//添加一张图片,并设置持续时间

animationDrawable.addFrame(getResources().getDrawable(R.drawable.loading_01),200);

//获取某一帧图片

animationDrawable.getFrame(0);

注意

帧动画适用图片比较少的情况,如果图片数量庞大,很容易会oom,不但如此,ui会很卡,体验不好,所以帧动画既简单实用,又需要注意细节。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值