文档章节

绘画,动画,线程

daveztong
 daveztong
发布于 2014/11/06 21:25
字数 1094
阅读 28
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

当你改变一个可见view的属性时,即使没有使用动画,属性的变化也不会即时发生。实际上,系统会记录下你想要的改变,并标记这个view需要重绘。你可以改变许多view的可见属性,但是这些改变都是积累起来形成指令。之后,当你的代码都运行完之后,系统会有一个空闲时间,此时她就会重绘所有需要重绘的views,这个时刻就叫“重绘时刻”,稍后会有详解。 你可以对上面的理论进行验证,例如通过简单的将一个view的可见属性进行改变,接着再将其改回原来的值,运行之后你会发现,什么动画效果都没有。例如,假设一个view的背景色是绿色,通过代码将其变为红色,然后又改为绿色:

// 开始绿色改为红色
view.backgroundColor = [UIColor redColor];
// ... 耗时操作...
view.backgroundColor = [UIColor greenColor];
// 代码运行结束,这里就是重绘时刻了

系统会累积所有期望的改变直至重绘时刻到来,重绘时刻只有在代码运行结束的时候才会到来,所以当重绘时刻来临的时候,最后一个累积的变化是将view的背景色设置为绿色,刚好是原来的颜色。因此,无论在有多少耗时代码在两个颜色改变之间,用户是不会看大颜色的改变的。 所以你不应该命令一个view去重绘,而是告诉她需要重绘通过调用setNeedsDisplay这个方法。 类似的,当你请求执行一个动画时,动画直到重绘时刻才会发生。(可以强制立即进行动画,但不常用。) 现在我们来谈谈动画执行的机制。其实动画都是精致的幻觉而已。把动画想成一部电影,卡通片,被插入到了用户和真实的屏幕之间,当动画执行时,电影就被叠加在了屏幕上。动画结束时,电影也被移走了,显示出电影后面真正的屏幕。用户完全没有意识到这些,因为当电影开始时,电影的第一帧和真实的屏幕一模一样,当电影结束的时候,电影的最后一帧也和真实的屏幕一样。 所以,当你通过动画将一个view从位置1放置到位置2时,可以预想一个典型的事件序列: 1.view被设置到位置2,但是重绘时刻没有到来,所以仍然会停留在位置1 。 2.剩余的代码运行完毕。 3.重绘时刻到来,如果没有动画,view将会突然从位置1跳刀位置2。如果指定了动画,就会从位置1开始,用户看到的位置仍然是位1,就像电影的第一帧一样。 4.动画开始,view会显示在位置1和位置2之间。 5.动画结束,view已经到达位置2 。 6.动画被移除,view的的确确放在了位置2 。 意识到“电影”和真实发生在view上的动画的不同之处是正确配置动画的关键之处。新手经常抱怨定位一个view运行时正常的,但是动画结束之后,view跳到了别的位置。这种情况一般是你设置好了动画但是没能成功将其移至动画最终的位置。跳动发生的原因是因为当动画结束后,真实的位置不匹配动画的最后一帧。 动画是在单独的线程中发生的。你不需要担心细节问题(减去了多线程的复杂处理啊!)。 当动画结束时,一般需要通知相应的代码这是一个经常遇到的需求。大多数动画APIs提供了设置通知的方式。如动画结束通知可以用来链接动画:一个动画结束紧接着下一个动画执行,还有就是进行一些清理工作。常遇到的就是处理触摸事件。一个经验就是在执行动画的时候关闭响应,为了不产生各种奇怪的情况。

© 著作权归作者所有

daveztong
粉丝 4
博文 93
码字总数 21482
作品 0
成都
程序员
私信 提问
android学习笔记——SurfaceView 的理解

SurfaceView 的概念和用途 surfaceview是view的一个子类,可以直接从内存或者DMA等硬件接口中取得图像数据,是一个非常重要的绘图视图。他的特性是:可以在主线程之外的线程中向屏幕绘图,这...

小白杨啦啦
2016/04/30
71
0
Android之SurfaceView使用总结

1.概念 SurfaceView是View类的子类,可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图视图。它的特性是:可以在主线程之外的 线程中向屏幕绘图上。这样可以避免画图任务繁重...

zhangyujsj
2016/01/04
170
0
Android动态壁纸的制作教程

本文为原创翻译,原文链接:http://blog.androgames.net/date/2010/01/ 动态壁纸是在Android 2.1新增的一个功能。动态壁纸可以添加到Android的桌面,具有交互式的动画背景效果。在本教程中,...

迷途d书童
2012/02/08
21.3K
4
android中的surfaceview控件

SurfaceView是继承于View类的,有绘制动态图片,播放视频的作用。View负责在主线程中更新动画,而在SurfaceView是在一个新线程中更新动画,并且它是一个2D的画布效果,将自己放置于屏幕的最低...

Vincent540329
2015/07/09
429
0
surfaceView和View的区别

概念:view在UI线程去更新自己;而SurfaceView则在一个子线程中去更新自己   surfaceView是在一个新起的单独线程中可以重新绘制画面,而View必须在UI的主线程中更新画面   在UI的主线程中...

丁佳辉
02/18
8
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里云视频云正式支持AV1编码格式 为视频编码服务降本提效

今天我们要说的 AV1 可不是我们平时说的 .AVI 文件格式,它是由AOM(Alliance for Open Media,开放媒体联盟)制定的一个开源、免版权费的视频编码格式,可以解决H.265昂贵的专利费用和复杂的...

一肥仔
18分钟前
8
0
软件缺陷静态分析 CodeSonar 5.2 新版发布

对于使用C和C++构建安全关键软件的开发团队而言,CodeSonar一直是首选的静态分析解决方案。在近期发行的版本中,CodeSonar通过使用开放标准来扩展其语言覆盖范围,并增加了对Java、C#、Obj...

旋极科技
19分钟前
5
0
数据迁移

1. insert into values 或 insert into select批量插入时,都满足事务的原子性与一致性,但要注意insert into select的加锁问题。 2. replace into与insert into on duplicate key update都可...

qiang123
26分钟前
6
0
Linux装Windows系统后还不会激活?3招教你搞定

     相信大家已经发现荣耀MagicBook科技尝鲜版有多“香”了,不但可以轻松的将Linux系统装回Windows系统,还足足省下了300大洋!但是装回系统就万事大吉了吗?NoNoNo,我们还需要去激活...

梅丽莎好
28分钟前
6
0
Tomcat8源码分析-请求处理过程

上一篇:Tomcat8源码分析-启动流程-start方法 此篇主要讲Tomcat8从接收请求到处理请求的时序图画出来,并用文字描述一下主要流程 时序图 说明 文字描述流程之前先提示如下两点: 1.Acceptor...

特拉仔
30分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部