Android动画原理-基础篇(认识View)

一、动画是什么

Animation is a dynamic medium in which images or objects are manipulated to appear as moving images. -来自维基百科

翻译:动画是动态的画面。

二、android中的动画

手机的屏幕是刷新的,正常情况下频率在60fps.也就是大约16ms界面会刷新一次。

android所有的动画的原理都是在这16ms之间,改变了显示内容的区域,从而达到动画的效果。

因为android的可视控件的绘制都是在View上完成的,所以理解View对理解动画有很大的帮助。

三、简述View的绘制过程

View的绘制过程分为三个步骤,测量、布局、绘制。

这三个词很容易理解,下面重点解释这三个步骤具体跟View产生了什么样的联系。

1.测量:
View的测量发生在measure,父布局调用child.measure方法来测量子view.而子view合适的反馈应该是测量完毕后通过setMeasureDimension方法设置好自己的大小,以便父view作参考。

View测量的过程常常发生在onMeasure方法中,测量完毕后调用setMeasureDimension实际是设置了View的mMeasureWidth和mMeasureHeight。

2.布局:

View的布局发生在layout中,同样父布局调用child.layout(l,r,t,b)并传递给child设定好的位置来让child设置自身的mLeft,mRight,mTop,mBottom。

一般情况会直接根据layout的建议来设置自己的mLeft,mRight,mTop,mBottom。

当然你可以忽略建议,自己设置,注意如果你改了mLeft,mTop,意味着你对父view对自己设置的左上角顶点不满意。

如果你改变了(mRight-mLeft) 和 (mBottom-mTop) 意味着你对父view对自己设置的大小不满意。--你应该已经知道此后View的getWidht 和 getHeight就是获取的前面两个减法运算的结果。

你可以在程序运行中随时改变它们,而这种场景就包括动画。

3.绘制

绘制发生的View的draw方法中。父View会通过drawchild会调用child的draw(x,x,x)三个参数的这个方法,其中有一个参数是canvas。

在draw(x,x,x)方法中,View默认先对canvas translate一下 到View的坐标系中,然后进行硬件或软件的绘制。

原文地址:https://www.cnblogs.com/vete-l/p/9145116.html

时间: 2024-08-06 06:03:24

Android动画原理-基础篇(认识View)的相关文章

Java(Android)线程池---基础篇

1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? 1 newThread(newRunnable(){ 2 3 @Override 4 publicvoidrun(){ 5 // TODO Auto-generated method stub 6 } 7 }).start(); 那你就out太多了,new Thread的弊端如下: a. 每次new Thread新建对象性能差.b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致

Android动画原理分析

最近在Android上做了一些动画效果,网上查了一些资料,有各种各样的使用方式,于是乘热打铁,想具体分析一下动画是如何实现的,Animation, Animator都有哪些区别等等. 首先说Animation(android.view.animation.Animation)对象. 无论是用纯java代码构建Animation对象,还是通过xml文件定义Animation,其实最终的结果都是 Animation a = new AlphaAnimation(); Animation b = ne

Android应用开发基础篇(4)-----TabHost(选项卡)

链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/18/2357093.html 一.概述 TabHost是一种用来显示标签的组件,不清楚?看一下来电通这个应用就知道了.这个组件用起来与其他组件不太一样,它需要继承TabActivity这个类,还有它的布局文件与我们平时用的也有些不一样. 二.要求 实现一个具有三个标签的选项卡,每个标签使用不同的布局作为内容,当切换不同的标签时向用户发出提示. 三.实现      声明:这个应用需要用到前面一篇

Android应用开发基础篇(3)-----ListView

链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/16/2354625.html 一.概述 ListView是一个列表显示控件,它的应用非常广泛,在很多应用程序中都可以看到它的身影,比如来电通,网易新闻等等,特别是QQ.因此非常有必要熟练掌握它. 二.要求 能够利用ListView显示一些内容,如数据.文本,某一行被点击时有相应的提示:能够实现简单的ListView的动态插入和删除. 三.实现 新建工程MyListView,修改/res/lay

Android应用开发基础篇(13)-----GestureDetector(手势识别)

链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/05/2381025.html 一.概述 GestureDetector是一个用于识别手势的类,这里所讲的手势识别,不是模式识别里所讲的手势(用户的手在用摄像头前做的动作)识别,而是说用户的手在触摸屏上做的手势(比如滑动等),它可以识别一般的手势,也可以识别用户自定义的手势. 二.要求 利用GestureDetector.ViewFlipper类实现两个View之间的切换. 三.实现 新建工程M

打造简易NineoldAndroids动画库,深入理解Android动画原理

简介 NineoldAndroids是Github上一个著名的动画库,简单来说,NineOldAndroids是一个向下兼容的动画库,主要是使低于API 11的系统也能够使用View的属性动画. 网上已经有一些文章,介绍了这个库的设计,包括类结构和思想,例如 NineOldAnimations 源码解析 NineoldAndroids动画库源码分析 上面两篇文章都比较详细的介绍了NineoldAndroids的源码,可以说为大家看源码带来很大的方便. 那为什么我还要写这篇文章呢? 我们来看Nin

Android应用开发基础篇(12)-----Socket通信(转载)

转自:http://www.devdiv.com/android_socket_-blog-258060-10594.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌握网络编程是非常有必要的,而我觉得socket编程是网络编程的基础.在进入正题之前,先介 绍几点网络知识,一:socket编程有分TCP和UDP两种,TCP是基于连接的,而UDP是无连接的:二:一个TCP连接包括了输入和输出两条独立的 路径:三:服务器必须先运行然后客户端才能与它进行通信.四:客户端与服务

Android应用开发基础篇(12)-----Socket通信

链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/03/2378669.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌握网络编程是非常有必要的,而我觉得socket编程是网络编程的基础.在进入正题之前,先介绍几点网络知识,一:socket编程有分TCP和UDP两种,TCP是基于连接的,而UDP是无连接的:二:一个TCP连接包括了输入和输出两条独立的路径:三:服务器必须先运行然后客户端才能与它进行通信.四:客户端与服

Android 动画原理

简介 Android 平台提供了三类动画,1.Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变):2. Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似:3.属性动画,改变对象的实际属性达到动画效果. 下面将用导图方式介绍,导图原图可以通过鼠标右键另存为获得. 详情 1.Animation 2.AnimationUtils 3.AlphaAnimation 4.RotateAnimation 5.ScaleAnimation 6.Tran