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

比眉伴天荒 2022-10-16 02:54 458阅读 0赞

一个月没写点东西,最近闲下来打算回顾一下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 条评论,458人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Android 动画 xml 方式实现

    > 在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就

    相关 Android动画&补间动画

    在Android开发中,有的时候为了展示更好的UI效果,通常会通过给一些UI添加动画来达到这一目的,所以Android Api定义了两种动画的Api供开发者使用:逐帧动画和补间