为什么用问号?因为有点不知道写什么了。。。这周真的很忙,没有太多的时间来学习,就吃吃老本吧。
首先,先谈谈android自己的动画机制。
我们知道,继承Animation需要实现一个方法,applyTransformation (interpolatedTime, Transformation t)。我们可以通过时间t来确定对我们的view做什么操作!这个是基本功,我不想多做解释了。
那系统是如何绘制出动画的呢?为什么我们使用了anim.start()我们就可以得到想要的动画呢?
我大概讲一下系统是怎么做的:
一、代码位置,2D的绘画机制是ViewGroup包含几个View,组成树状结构。在Viewgroup的代码中,你可以找到动画绘制的代码,在Viewgroup里的dispatchDraw方法中。
二,实现,在ViewGroup dispatchDraw中,child.getAnim.isStart()? 如果是,那么,记住
startTime,然后新建Transformation传入这个child的Animation中(就是传入Animation的applyTransformation中),得到Animation的“目的”(平移?缩小?旋转?),好了,得到“目的”后,对dispatchDraw的Canvas作相应变化(比如平移,那么就使用canvas.translate),最后,在draw上我们的child!(其实ViewGroup在没有动画时候,就只作draw child这件事而已)。
三、interpolatedTime怎么做出来的?animation都有自己的duration,在有了上面一步的startTime后,我们每次执行dispatchDraw的时候,可以获得当前时间nowTime(都是毫秒级别),那么我们使用(nowTime - startTime) / duration就可以得到这个float形式的百分比时间了percent。但是要得到interpolatedTime还需要将这个percentTime传入一个interpolator中,然后经过interpolator计算得出。(这就是加速或者减速变换的原理,当然还可以有更复杂的数学变换)
四、有什么用?知道了android的动画架构,我们就可以知道:1.为啥我的view在做animation的时候会有一部分不现实呢,好像被截掉了?根据上面分析,你这个做动画的view所依附的ViewGroup是不是太小了?这个时候,增加ViewGroup的padding是一个好办法。2.我们还可以自己根据这个架构,做动画。比如在onDraw中,自己算interpolatedTime,是否还需要动画?是,invalidate(),继续。
其实,动画就是每次刷新把图像画出来就行,也就两个重点,如何画?怎么刷新?
android怎么刷新?就是在dispatch中,如果需要动画,那么在每次绘画后,会继续call一次invalidate方法。android如何画?就是使用interpolatedTime和Transformation的机制来画出动画。
接下来,我来介绍一种android中自己做的动画方法。举个例子,平移。首先,如何画?使用Scroller类,来辅助计算,设定最终的x y值,start后,就可以在任一时间问它要现在到哪了(x和y值)!需要做动画的View,需要放出接口,来供控制者在得到xy值后可以改变View的属性。怎么刷新?自己做一个Runnable(一般嵌在View中可以直接使用post方法),留出接口,供动画开启(如scrollTo(x,y))。动画开启后,在run()中加入如何画的部分,知道怎么画后,改变View别且调用invalidate(),如果动画未结束,再次post自己,到达到持续动画的效果。如果结束,则remove自己,结束循环。
好了,动画做出了,当然还有很多方法,只要解决上述两个问题即可。如3D中每次绘制结束后使用swapBuffer来解决怎么刷新。如何画这个问题,不同动画,方法不同罢了。
分享到:
相关推荐
在iOS的MVC(Model-View-Controller)架构中,CALayer是View(视图)的一部分,用于界面显示和界面时间的处理。每个View背后都有一个Layer,而Layer本质上是一个模型(Model),包含了Layer的各种属性值。 接下来,...
1. **游戏引擎**:Unity、Unreal Engine等主流游戏引擎的使用,包括场景构建、动画系统和物理引擎等。 2. **编程语言**:C#和C++是游戏开发的常用语言,尤其是对于引擎的脚本编写。 3. **图形学**:理解3D图形渲染...
它强调了约定优于配置,提供了一套完整的MVC(模型-视图-控制器)架构,以简化开发流程。在这个“演示基本动画过渡和触摸手势的Ember.js移动应用程序”中,我们将深入探讨如何在Ember应用中实现动态视觉效果和用户...
- 解释Android中的动画机制,包括属性动画和视图动画。 3. **性能优化** - 如何进行内存优化,避免内存泄漏? - 解释Dalvik和ART的区别,以及它们对性能的影响。 - 如何进行耗时操作的异步处理,避免ANR...
通过这一过程,可以学习OpenGL ES、物理引擎、动画处理等技术。 #### 应用优化与底层技术 在掌握了大部分Android应用开发技能之后,可以考虑向更深层次的技术领域发展,比如使用JNI技术调用本地C/C++代码,这对于...
以上只是对这11个面试问题的简单概述,深入了解每个话题涉及到深入学习Android架构、设计模式和最佳实践。准备面试时,应结合实际项目经验,详细阐述对这些概念的应用和理解,展示自己的专业技能和问题解决能力。...
首先,我们来谈谈UI(用户界面)设计。在"UI初级测试-谭启宏"这部分,开发者可能涉及了UIKit框架,这是iOS应用构建用户界面的主要工具。UIKit提供了各种视图(如UILabel、UIButton、UIImageView等)和控制器(如...
首先,我们来谈谈Android中的ImageView。ImageView是Android SDK中的一个视图类,主要用于显示单个图像资源。在这个小程序中,它被用来展示图片,并实现了缩放功能。缩放通常是通过手势识别来实现的,例如双指捏合或...
- **CSS3**:引入圆角、阴影、动画效果等功能,增强网页视觉效果。 **6. 移动端适配** - **媒体查询**:使用@media规则根据不同设备屏幕尺寸调整样式。 - **响应式设计**:采用流式布局、图片自适应等技术实现...
在某些场景下,我们可能需要在RecyclerView中实现树形结构的无限级展示,例如目录层级、组织架构或者商品分类等。这涉及到对RecyclerView的自定义适配器和布局管理器的深入理解。 首先,要实现树形结构,我们需要一...
joeyguo's blog ...| 可用性提升 | 脚本错误量极致优化 ...| Webpack | Web 性能优化 - 手Q web 实践总结 Node直出理论与实践总结 React同构直出优化总结 Node直出(服务端渲染)再优化(coming...谈谈函数式编程 ( Functional P
接着,我们来谈谈Flash开发环境。Adobe Flash Professional是创建SWF文件的主要工具,它提供了一个集成的开发环境,允许设计师和开发者创建丰富的互联网内容。在这个环境中,可以设计图形,编写ActionScript(Flash...
首先,让我们谈谈客户端和服务器架构。这种架构是现代网络游戏的基础,它将游戏逻辑和用户界面放在客户端,而服务器则负责协调玩家之间的交互和游戏状态。客户端通常由游戏引擎驱动,包含游戏的视觉、声音和输入处理...
6. **动画**:属性动画、视图动画和过渡动画提供了丰富的视觉效果。 7. **自定义View**:了解View的绘制过程,重写onDraw()方法可以创建自己的UI组件。 8. **图片加载库**:如Glide或Picasso,优化图片加载,防止...
首先,我们来谈谈 MVC(Model-View-Controller)架构模式。MVC 是一种广泛应用于软件工程的设计模式,尤其在Web和移动应用开发中。在Android中,Model代表数据模型,负责处理业务逻辑和数据存储;View是用户界面,...
接下来,我们来谈谈标签中的关键词:"3d"、"zookeeper"、"分布式"以及"云原生(cloud native)"。 "3d"显然与我们的主题紧密相关,Steno3D库可能提供了一系列工具和接口,支持3D模型的创建、导入、导出,以及3D场景的...
首先,我们来谈谈图形学基础。3D模型的构建与渲染是3D引擎的核心部分,这包括了多边形建模、纹理贴图、光照计算、阴影投射等技术。例如,OpenGL和DirectX是常见的图形API,用于在硬件层面进行高效的图形渲染。同时,...
超级玛丽是一款经典的平台跳跃游戏,它的源码可以让我们了解到游戏的基本架构,包括玩家角色的移动、碰撞检测、关卡设计、动画处理等方面的知识。通过分析源码,我们可以学习到如何使用C++实现游戏循环、如何处理...
此外,ZLG_GUI可能还包括一些高级特性,如多线程支持、图形渲染优化、动画效果以及触摸输入的处理等。这些特性使得开发者能够构建更加生动、响应迅速的应用,提升用户体验。 在实际开发过程中,理解ZLG_GUI的架构和...
首先,让我们谈谈HTML5的...通过研究这个代码,你可以学习到如何组织游戏架构、处理用户输入、实现简单的物理模拟、绘制图形以及创建动态效果。对于初学者来说,这是一个很好的实践项目,有助于提升Web开发技能。