精华内容
下载资源
问答
  • 自定义的多级符号列表保存在Normal模板中,这样,基于此模板新建的文档,就可以方便地调用这种列表样式了。  第一步:自定义段落样式  自定义A、B、C、D4种段落样式,并保存到模板中,方法请参阅上一节。  ...
    把自定义的多级符号列表保存在Normal模板中,这样,基于此模板新建的文档,就可以方便地调用这种列表样式了。

      第一步:自定义段落样式

      自定义A、B、C、D4种段落样式,并保存到模板中,方法请参阅上一节。

      如果文档中已使用要定义列表样式,可关闭此文档,新建文档,然后执行“格式”→“项目符号和编号”→“多级列表”选项卡,选中此样式,再单击“重新设置”按钮。

      第二步:保存自定义多级符号列表

      1.执行“格式”→“项目符号和编号”→“列表样式”选项卡。

      2.单击“添加”按钮,打开“新建样式”对话框。

      3.命名新样式,本例中将其命名为“论文”。

      4.单击“格式”按钮,选择“编号”,打开“项目符号和编号”对话框,选中一种要参照的样式。

      5.单击“自定义”按钮,打开“自定义多级符号列表”对话框,逐一选择级别,进行各项设置并将级别链接到第一步自定义的段落样式(动画演示略,请参考上一节)。

      6.设置完毕后,单击“确定”按钮,回到“新建样式”对话框。

      7.在“新建样式”对话框中,可进行下面一些设置:

      “开始时间”框,其实就是“起始编号”,对符号类不可用。在本例中,如果将第一级别“开始时间”设置为“01”,那么第一个编号将是“第零章”。

      “格式应用于”,设置符号(编号)部分的字体格式,对后续的文本无效。

      此外,可针对某一级别改变其符号(编号)类型、增加缩进量或减少缩进量。

      8.选中“添加到模板”复选框,将新样式保存到Normal模板中。

      9.单击“确定”关闭对话框并在文档中使用此样式。如暂时不用,可单击“关闭”按钮。使用时只需在基于Normal模板新建的文档中执行“格式”→“项目符号和编号”→“列表样式”选项卡,在“列表样式”框中,选择“论文”,单击“确定”按钮即可。

      提示:

      1.本节内容接上一节,操作略显繁琐。笔者发现,多级编号的级别与自定义的段落样式链接后,如果直接添加(或修改后添加)文档内的多级列表样式,会发生C、D样式的“段落缩进2字符”格式丢失的现象。所以,如遇相似情况,建议从第一步开始重新操作。

      2.相对于本例,还有另外一种使用多级编号的方法:级别链接到A、B、C、D样式后,这些样式在样式框中自动更名为“第一章 A”、“第一节 B”、“一、C”、“D”,选择其中任何一个,即可马上在文档中显示其编号格式,接下来只需使用“增加缩进量”按钮(或Tab键)和“减少缩进量”按钮(或Shift+Tab键)即可在自定义的各级编号间切换显示。

      具体操作的动画演示过程如下:看不清楚 请点击动画放大.

    1160592307_ddvip_2278.gif

    转载于:https://www.cnblogs.com/junzhongxu/archive/2008/07/22/1248384.html

    展开全文
  • 《全国中小学信息技术课程教学大赛获奖案例初中信息技术八年级-设置自定义动画动作路径》由会员分享,可在线阅读,更多相关《全国中小学信息技术课程教学大赛获奖案例初中信息技术八年级-设置自定义动画动作路径(9页...

    《全国中小学信息技术课程教学大赛获奖案例初中信息技术八年级-设置自定义动画动作路径》由会员分享,可在线阅读,更多相关《全国中小学信息技术课程教学大赛获奖案例初中信息技术八年级-设置自定义动画动作路径(9页珍藏版)》请在人人文库网上搜索。

    1、教案名称设置自定义动画动作路径年级 初二 课时 1一、教材分析自定义动画动作路径这节内容是八年级上册第二单元的内容,本单元主要介 绍了制作多媒体演示文稿的基本思路与方法,使学生在完成作品的实践过程中, 逐步提高应用多媒体素材的能力。PowerPoint是Microsof toff ice软件之一。它是一 种多功能的图文处理软件系统。PowerPoint的功能很强大,用它可以制作出包含 文本、图片、声音、动画和视频的多媒体作品。相对于word来说,效果丰富的动 画效果是powerpoint的精髓,而自定义动画可以实现各个要素独特的动画效果, 这节课学习的内容是怎样给幻灯片的操作对象设置动作路径,。

    2、从而达到一定的动 画效果。根据初二年级学生的学习水平以及信息技术新课标的要求,依据教材作 了适度的调整,通过实例(小猫钓鱼的故事情节)设计了本课。本节课是在学生 已掌握了幻灯片基本操作的基础上和自定义动画的“进入”、“强调”、“退 出”的基础上而设立的高层次的学习任务一一动作路径。本节课利用学生都熟悉 的故事小猫钓鱼,通过绘制动作路径让小猫、蝴蝶、蜡蜓等动起来完善故事 情节的过程中让学生学会设置动作路径。从而让学生达到学习U标。二、学生分析初二的学生经过初一一年的系统学习,同一年级学生运用信息技术能力及计 算机的基本操作能力都基本差不多,只有个别学生计算机操作能力较差些。 PowerPoint。

    3、这一单元的内容学生比较感兴趣,学生可以独立制作简单的幻灯片, 对于一些细节内容掌握的还不是太好。本节课的内容是在学生掌握了幻灯片基本 操作的基础上和自定义动画的“进入、强调、退出的基础上”而进一步学习的动 作路径的设置。学生对这一节内容比较感兴趣,通过故事情节的完善,学生之间 的互评让学生体验成功。对于动作路径的简单绘制学生容易掌握,但动作路径中 的开始选项“之询”和“之后”的运用,要给予学生重点讲解和演示,让学生掌 握这个知识点。对于一些学困生要个别指导,尽量让每个学生都掌握本课的知识 点。三、教学目标知识与技能:1、在掌握自定义动画“进入、强调、退出”的基础上,掌握较为复杂 的“动作路径”。

    4、的设置。2、掌握合适的动作路径,为幻灯片添加自定义动画的效果。过程与方法:精讲多练,创设情境,任务驱动,通过故事情节,选择合适的动作路径, 让小猫、蝴蝶、蜡蜓等动起来,完成自定义动画的设置,完善故事情节,实现动 作与画面的和谐统一。情感态度与价值观:通过自定义动画的设置和小猫钓鱼的故事,进一步培养学生学习信息技术的 兴趣,让学生明白做事不能三心二意,要一心一意,才能成功。四、教学重难点教学重点:1、绘制动作路径;2、动作路径的调整和设置:3、速度的调整4、开始选项的运用及设置教学难点:“开始”选项的“单击”、“之前”“之后”的运用及设置五、教学策略任务驱动,让学生自主学习自主完成任务的过程中,。

    5、教师适时的指导与提 示,发现问题集中讲解与演示。对于个别学生要个别辅导,学生完善故事惜节 后,自评、互评、师评发现问题,更加完善作品。六、教具准备多媒体计算机机房、教师授课演示文稿、练习素材七、教学过程(-)课题引入1、教师放映演示做好的PPT: “小猫钓鱼”播放小猫钓鱼演示文稿,并下发小猫钓鱼的练习素材给学生。教师提问:小猫钓鱼的故事告诉了我们一个什么道理?演示文稿中的小猫和蝴 蝶等是怎么动起来的?让学生思考运用昨天讲过的自定义动画前三种“进入”、“强调”、“退出”能否让小猫和蝴蝶等动起来?2、学生思考并回答问题,明白做事不能三心二意的,一心一意才能成功。尝 试用昨天的进入、强调让小猫动起来。

    6、动作不连贯,引出自定义动画第四个知识点“动作路径”。教师:现在我们就来学习这节课的内容一一设置自定义动画动作路径 设计意图:本环节通过创设情景引入课题,激发了学生的学习兴趣,使学生在学 习情境中主动、积极地接受任务,自然而然把学生引入学习情境中。(二) 学习新知:教师:首先出示学习H标:1、熟练绘制自定义动作路径2、根据要求适时地调整路径和速度3、学会运用和设置开始选项上节课我们讲了自定义动画的添加效果前三种:进入、强调、退出,今天我们 学习第四种:动作路径。亲爱的同学们,现在我们自己动手,用自定义动画动作 路径让小猫、蝴蝶、蜡蜓动起来,完善故事情节。任务一:根据故事情节,绘制动作路径让小猫和。

    7、猫妈妈同时出发到河边钓鱼(提示:“同时”如何设置“开始”选项)学生:打开练习素材,熟悉回顾“自定义动画”工具栏内的工具。自定义动画一一添加效果一一&、进入;b、强调;C、退出;d、动作路径。 尝试对“自定义动画”中的“设置动作路径”工具进行操作完成任务一。教师:巡视指导,发现问题及时提示纠正,对于个别操作能力差的学生个别指 导。最后教师集中讲解演示纠正发现的问题。强调之前的设置及运用(把猫妈妈 开始选项设置为单击、小猫设置为“之前”,速度都为中速,就可以实现小猫和 猫妈妈同时出发)没有完成任务一的学生继续修改完成,完成任务一的学生着手 操作完成任务二。任务二:用自定义动画实现蜡蜓飞来,小猫去追。

    8、逐蜻蜓(注意小猫有两个动 作,坐着变成站着,思考怎么运用上节课学过的“出现”、和“消失”)教师巡视指导,提示运用“之后”,回顾上节课的内容“出现”和“消失” 并运用到本节课中,然后把发现的问题集中讲解。任务三:试着用自定义路径中的自山曲线,分别绘制蝴蝶、蜡蜓飞过来的效 果,要求动作流畅。(提示蝴蝶和蜡蜓飞的路径并不是直的,所以要运用自曲曲 线)学生使用动作路径中的绘制自定义路径一一自山曲线,来选择一条路径完成 蝴蝶和蜡蜓在小猫身边、头上飞来飞去。教师巡视指导,然后发现问题集中讲解演示,强调绘制动作路径的操作要 领:1、选定对象2、绘制动作路径。3、动作路径的调整和设置。4、开始选项“之前”“之。

    9、后”的运用5、调节速度6、调整顺序任务四:保存作品,演示放映幻灯片,看有无制作错误,完善作品教师巡视指导过程中,发现有代表性的作品。设计意图:通过播放小猫钓鱼的幻灯片引起学生的兴趣,让学生觉得原来幻 灯片还可以把故事活灵活现的表现出来,布置任务让学生自主探究学习,养成良 好的学习习惯,给学生自我展示的机会,提高学习积极性。让学生体验成功的愉 悦。通过任务二、三、四综合练习,巩固知识,让知识转化为能力。通过这一环 节教学,让学生根据不同的情况设置不同的路径,提高学生的实际操作能力。(三)分享评价教师在巡视指导的过程中选出具有代表性的作品。展示个别学生作品,让同 学说出自己制作的思路,自认为优缺点。

    10、有哪些,其他同学评价,说出他们的优缺 点,然后教师点评。设计意图:通过自评、互评、师评让学生发现自己的优缺点,发现问题及时 改正优化缺点,完善作品,让学生掌握幻灯片自定义动画四种方式的设置。(四)课后作业:尝试自己编一个小故事,以幻灯片的方式把故事呈现出 来,要求故事画面整洁大方,动作路径绘制流畅,体现一定的艺术性,幻灯片之 间过度切换自然,并试着运用超链接。(超链接相关知识点参照下节内容)设计意图:拔高练习,让学生自己创作的过程中回顾本节内容,预习下节课 内容(幻灯片的切换方式、超链接)(五)总结教师:你学到了什么?学生回顾本节课自己所掌握的知识教师总结:本节课我们学习了自定义动画中的动作路。

    11、径,设置幻灯片的动画 效果,使我们的小猫、蝴蝶、蜡蜓等动起来,完善了故事情节,使我们感觉到幻 灯片功能的强大,在我们没有学过Flash的基础上,可以做出这样的动画效果。 本节课的知识点主要是绘制动作路径的操作要领:选定对象、绘制动作路径、 动作路径的调整和设置、开始选项“之前”“之后”的运用、调节速度、调整顺 序。同时通过小猫钓鱼的故事,不管我们学习或做事都不能三心二意、心不 在焉,只有一心一意、竭尽全力才能成功。学生通过老师的总结回顾所学的内容,强化知识点,领会小猫钓鱼故 事的蕴意。设计意图:通过归纳总结,理清知识脉络,为了让学生更好的明确知识点强 化巩固知识。课后作业:用幻灯片制作一个自己。

    12、喜欢的小故事,充分运用幻灯片中所学过 的知识点,充分地体现故事情节。设计意图:拔高练习八、教学反思优点:本节课参照教材知识点不是单纯地照本宣科讲授知识点,而是运用学 生都皆知的小故事小猫钓鱼,易于学生理解,吸引学生的注意力,激发学生 的学习兴趣。讲授新课之前给学生播放做好的小猫钓鱼幻灯片,让学生感觉 幻灯片也可以做出这样的动画效果,还可以用幻灯片的方式讲故事,播放完后明 显感觉学生对本课的内容非常感兴趣。都有种跃跃欲试的冲动,所以运用任务驱 动教学法,正迎合了学生的心理也培养了学生自主学习、自主探究、动手实践操 作的能力。在学生完成任务一、二、三的过程中,教师巡视指导,及时发现问题 加以纠正,。

    13、然后集中讲解强化知识点。讲练结合,利于学生发现错误及时纠正, 练习强化巩固知识。也可以明确所要掌握的知识点。在整个教学过程中,教师为 主导,学生为主体。分享评价环节,自评、互评、师评可以发扬优点改正缺点, 让学生体验成功再接再厉,也激励其他同学继续努力。课后作业,是一个拔高练 习,学生在创作的过程中可以回顾本节课内容也可以预习新知。教师在传授知识 的同时更要育人,通过实例小猫钓鱼的故事,让学生明口不管是做事还是学 习都不能三心二意,一心一意才有可能成功。缺点:虽然学生对本节课内容非常感兴趣,学生都投入到学习情境中,学生 的思路随着任务层层递进吸引学生的注意力,大部分学生都完成了教学内容,达 到。

    14、了教学目标,但忽略了对学困生的照顾,同时运用“出现”、“消失”、“之 前”、“之后”的设置,对于学困生来说,有一定的难度,所以在课上出现了一 大部分学生学得热火朝天,惊呼自己的杰作,自我陶醉无暇顾及帮助学困生,其 中有4、5个学生,到任务二和任务三时,干着急不知如何下手,默默欣赏别人作 品时有种失落感,尽管教师巡视指导时个别辅导,但在有限的时间内,学困生还 是不能较好的掌握难点。布置课后作业,对于学困生来说也有一定的难度。所 以,以后任务要分层,布置基础任务和拔高任务。作业也要分层。在课上也要学 生之间互帮互助,可以让先完成任务的学生充当小老师,帮助学困生。课程内容比较紧凑,在分享评价时不能展示更多学生的作品。所以以后在时间分配上要改进,多关注后进生,实行分层任务、分层作业, 完成基础任务多鼓励学困生,提高他们的学习自信心。810。

    展开全文
  • 自定义Pop动画

    2015-12-24 11:39:09
    非常规跳转动画,也就是在modal的效果上,转换成其他的一些转场动画,或者自己定义一些效果 让跳出来的界面不是全屏显示,并且可以随意的动画跳出来,也就是类似下面的这样的效果。这是我从GitHub Pod大神封装的Pop...

    modal界面跳转

    在IOS中,相比大家都不陌生,除了导航控制器中的经常使用的push以外,我们也经常使用从下而上跳转的控制器效果,这也就是modal效果。

    modal跳转使用

    对于使用storyBoard内进行连线的跳转,我们只需要将一个按钮连线到我们需要的控制器,然后选择modal效果,就可以实现从当前控制器跳转到下一个控制器。

    而如何通过代码的话,也十分容易,先准备好需要跳转的modalVC控制器,只需要调用这么一句话

    <code class="hljs ini has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 102, 102);">[self presentViewController:modalVC animated:YES completion:completion]</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

    然后当需要回到原先界面的时候,只需要在出发时间的方法内部调用

    <code class="hljs objectivec has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.dismissViewControllerAnimated</span>:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">YES</span> completion:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

    modal扩展需求

    一般而言,我们对于界面的跳转也就到这里为止了,所以我们可以看到目前大部分的APP在采用modal跳转的时候都是很简单的从下往上跳转,然后回去从下往上。

    但是当我们闲着蛋疼看一些酷炫的APP的时候,会发现有些界面的跳转十分的酷炫。

    • 非常规跳转动画,也就是在modal的效果上,转换成其他的一些转场动画,或者自己定义一些效果
    • 让跳出来的界面不是全屏显示,并且可以随意的动画跳出来,也就是类似下面的这样的效果。这是我从GitHub Pod大神封装的Pop动画演示程序截图的, 
      https://github.com/schneiderandre/popping 
      pop效果

    modal系统默认情况下的调用原理

    • 对于StoryBoard拖线实现的跳转来说,和其他控制器跳转一样,跳转的前后的视图控制器都是通过Segue对象来进行的。Segue会在跳转前调用这个方法
    <code class="hljs erlang has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-pp" style="box-sizing: border-box;">-<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(void)</span>prepareForSegue:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UIStoryboardSegue</span> *)</span>segue sender:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(id)</span>sender</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

    根据Segue对象的destinationViewController属性可以获得跳转目标控制器,一般我们会该方法做跳转前的一些动作。 
    * 而对于用代码跳转的方式,因为是我们自己创建的目标控制器,因此,我们可以自己手动的在执行跳转的presentViewController方法之前做好需要做的准备。 
    * 其实不论是StoryBoard还是代码,系统最终都会调用presentViewController进行跳转。

    内部系统提供的方法

    • 在modal跳转的时候,其实每个需要被modal的视图控制器都有两个属性: 
      • modalPresentationStyle modal展现的类型。这是一个枚举类型,官方头文件中表示了内部的全部类型:
    <code class="hljs objectivec has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">typedef</span> NS_ENUM(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSInteger</span>, UIModalPresentationStyle) {
            UIModalPresentationFullScreen = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>,
            UIModalPresentationPageSheet NS_ENUM_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>_2),
            UIModalPresentationFormSheet NS_ENUM_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>_2),
            UIModalPresentationCurrentContext NS_ENUM_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>_2),
            UIModalPresentationCustom NS_ENUM_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span>_0),
            UIModalPresentationOverFullScreen NS_ENUM_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>_0),
            UIModalPresentationOverCurrentContext NS_ENUM_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>_0),
            UIModalPresentationPopover NS_ENUM_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>_0),
            UIModalPresentationNone NS_ENUM_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span>_0) = -<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,         
    };</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li></ul>

    从这些类型中,我们很容易就可以发现,其实系统本身也支持其他的一些展示的效果,不过效果有些局限。但是IOS 7.0之后,我们发现这里多了一个UIModalPresentationCustom。也就是说,我们可以自定义展现类型咯。 
    既然可以自定义,系统的其他类型就不管了,只要能实现自定义,那么大千世界就任我为所欲为咯。

    • transitioningDelegate 动画代理。 它是一个遵守了UIViewControllerTransitioningDelegate 协议的任意对象。那么既然是协议,我们就先看看内部有哪些协议方法:
    <code class="hljs erlang has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">// 控制展现动画的控制器,该方法要求返回遵守了<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIViewControllerAnimatedTransitioning</span>该协议的对象
    <span class="hljs-pp" style="box-sizing: border-box;">- <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(id <<span class="hljs-variable" style="box-sizing: border-box;">UIViewControllerAnimatedTransitioning</span>>)</span>animationControllerForPresentedController:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UIViewController</span> *)</span>presented presentingController:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UIViewController</span> *)</span>presenting sourceController:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UIViewController</span> *)</span>source;
    // 控制消失动画的控制器,该方法要求返回遵守了UIViewControllerAnimatedTransitioning该协议的对象
    - <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(id <<span class="hljs-variable" style="box-sizing: border-box;">UIViewControllerAnimatedTransitioning</span>>)</span>animationControllerForDismissedController:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UIViewController</span> *)</span>dismissed;
    // 返回控制转场动画的控制器<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UIPresentationController</span>)</span>,该方法将正在显示的对象,和需要显示的对象都交给你,然后返回一个控制转场动画的动画
    - <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UIPresentationController</span> *)</span>presentationControllerForPresentedViewController:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UIViewController</span> *)</span>presented presentingViewController:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UIViewController</span> *)</span>presenting sourceViewController:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UIViewController</span> *)</span>source NS_AVAILABLE_IOS<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>_0)</span>;</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

    这个协议中还有另外两个是支持实时交互的方法,这里暂时涉及不到就先不提了。

    从代理方法我们可以看出,根据上面的两个方法,我们还需要了解

    <code class="hljs objectivec has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">UIViewControllerAnimatedTransitioning这个协议
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 转场动画 (提供了转场上下文,根据上下文处理转场动画)</span>
    - (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)animateTransition:(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">id</span> <UIViewControllerContextTransitioning>)transitionContext;
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 转场动画时长,一般这里都随便填,真正的动画时间看你自定义的动画时长来决定</span>
    - (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSTimeInterval</span>)transitionDuration:(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">id</span> <UIViewControllerContextTransitioning>)transitionContext;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

    自定义modal分析

    根据以上的代理方法,根据系统的调用顺序,合理的实现代理方法就可以进行自定义动画了。

    分析图

    根据分析图可知,系统会根据系统内部顺序调用代理方法,因此,我们需要继承以上代理并且实现内部的代理方法。

    专门设置一个动画代理

    为了防止主控制器的臃肿和方法的解耦,主控制不关心动画的过程,而是我们专门创建一个对象来遵守所有的协议方法并且实现协议的方法。该代理遵守转场代理和转场动画协议,所有的转场动画的协议方法全部通过他实现

    每当我们需要进行跳转的时候,我们只需要给需要跳转的控制器的转场代理和转场方式,并且创建一个动画代理实现代理方法,在转场动画的代理方法中实现不同的动画即可根据自定义的方法进行跳转了。

    思路扩展

    如果一个项目需要比较多的modal跳转,或者需要酷炫的自定义modal跳转。如果每次都要自己去根据上面的思路图实现各种协议方法是一件十分费力的事情。 
    由于上面分解出来了一个动画代理,因此该代理就可以进行封装和重用。

    封装框架

    目标:

    控制器提供需要跳转的控制器,提供跳转控制器显示的大小位置(frame),根据提供的显示动画和消失动画即可实现自定义跳转。

    目的:

    完全不关心内部代理方法的实现,系统调用的方式,只需要提供自定义的内容来完成自定义跳转。

    实现

    做一个ViewController的分类,提供类似跳转的方法。

    <code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     *  自定义modal的跳转方式
     *
     * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> modalVC          需要展示的viewController
     * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> presentFrame     展示视图在屏幕的frame
     * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> presentAnimation 展示动画代码(返回的时间是转场动画上下文关闭的时间)
     * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> dismissAnimation 消失动画代码(返回的时间是转场动画上下文关闭的时间)
     关于转场动画上下文时长说明:
     转场动画上下文关闭的时间决定了改转场动画封锁界面的用户交互能力的时长,如果返回0表示立马接受用户交互,
     那么可能存在在动画过程中用户交互而导致动画达不到预期效果。
     一般建议返回动画的时间长度,正好动画结束,然后开启用户交互能力。
     特殊需求可以填写特殊时长
     * <span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> completion       完成回调
     */</span>
    -(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)mk_presentViewController:(UIViewController *)modalVC
                   withPresentFrame:(CGRect)presentFrame
               withPresentAnimation:(NSTimeInterval (^)(UIView *view))presentAnimation
               withDismissAnimation:(NSTimeInterval (^)(UIView *view))dismissAnimation
                     withCompletion:(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> (^)(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>))completion;
    </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li></ul>

    再通过运行时动态添加一个属性用于存储执行动画的代理对象

    <code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> *animationDelegateKey = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"animationDelegate"</span>;
    <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     *  runtime动态加载执行动画的代理属性的set方法
     */</span>
    - (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)setAnimationDelegate:(ZJAnimationDelegate *)animationDelegate {
        objc_setAssociatedObject(self, animationDelegateKey, animationDelegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     *  runtime动态加载执行动画的代理属性的get方法
     */</span>
    - (ZJAnimationDelegate *)animationDelegate {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> objc_getAssociatedObject(self, animationDelegateKey);
    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li></ul>

    代理对象内部存储了跳转需要的动画block,在动画方法内部在恰当的时间调用动画。

    <code class="hljs objectivec has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)animateTransition:(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">id</span> <UIViewControllerContextTransitioning>)transitionContext
    {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.isPresenting</span>) {
            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIView</span> *view = [transitionContext viewForKey:UITransitionContextToViewKey];
            [[transitionContext containerView] addSubview:view];
            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSTimeInterval</span> time = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.presentAnimation</span>(view);
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [transitionContext completeTransition:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">YES</span>];
            });
        }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {
            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIView</span> *view = [transitionContext viewForKey:UITransitionContextFromViewKey];
            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSTimeInterval</span> time = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.dismissAnimation</span>(view);
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [transitionContext completeTransition:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">YES</span>];
                [view removeFromSuperview];
            });
        }
    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li></ul>

    注意事项

    [transitionContext completeTransition:YES]; 
    一定要在动画结束之后调用,不然系统任务转场动画没结束,会一直封锁整个界面和用户教育的能力。

    所以这句话我是采用用户返回的时间来延迟加载。这句话只要在动画开始之后执行都不影响动画的执行效果,但是如果在动画之前执行会提前开启用户交互能力,因此可能动画会被用户的其他操作而打断。

    展开全文
  • Android Q自定义开关机动画

    千次阅读 热门讨论 2019-12-16 09:56:30
    Android Q自定义开关机动画 ====== Step 1: Enable MtkBootanimation ====== /vendor/mediatek/proprietary/operator/frameworks/bootanimation/ Rename Android_disable.mk to Android.mk /vendor/mediatek/...

    Android Q自定义开关机动画

    ====== Step 1: Enable MtkBootanimation ======

    /vendor/mediatek/proprietary/operator/frameworks/bootanimation/
    Rename Android_disable.mk to Android.mk 
    
    /vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/
    Rename Android_disable.mk to Android.mk 
    
    /frameworks/base/cmds/bootanimation/
    Rename Android.bp to Android.bp-
    

    ====== Step 2: Configure MtkBootanimation lib and exe ======

    /vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/Android.mk

    #####add by songhui for Bootanimation start 
    include $(BUILD_EXECUTABLE)
    ####
    #ifeq (OP01,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
    #    ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
    #        include $(BUILD_EXECUTABLE)
    #    endif
    #else ifeq (OP02,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
    #    ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
    #        include $(BUILD_EXECUTABLE)
    #    endif
    #else ifeq (OP09,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
    #    ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
    #        include $(BUILD_EXECUTABLE)
    #    endif
    #    endif
    ####
    #####add by songhui for Bootanimation end
    
    # libbootanimation
    # ===========================================================
    
    
    +LOCAL_SHARED_LIBRARIES += libterservice
    +LOCAL_C_INCLUDES += $(MTK_PATH_SOURCE)/hardware/terservice/include/
    
    
    ##### add by songhui for Bootanimation start
    include $(BUILD_SHARED_LIBRARY)
    #####
    #ifeq (OP01,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
    #    ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
    #include $(BUILD_SHARED_LIBRARY)
    #    endif
    #else ifeq (OP02,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
    #    ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
    #        include $(BUILD_SHARED_LIBRARY)
    #endif
    #else ifeq (OP09,$(word 1,$(subst _, ,$(OPTR_SPEC_SEG_DEF))))
    #    ifeq ($(strip $(MTK_BSP_PACKAGE)), yes)
    #        include $(BUILD_SHARED_LIBRARY)
    #    endif
    #endif
    #####add by songhui for Bootanimation end
    

    ====== Step 3: Add resources ======

    生成自定义bootanimation.zip和shutanimation.zip,并修改Makefile将resource文件放至目录system\media\,参考写法:

    $(LOCAL_PATH)/bootanimation.zip:system/media/bootanimation.zip
    $(LOCAL_PATH)/shutanimation.zip:system/media/shutanimation.zip
    

    具体改法请参考FAQ03051(包括开关机铃声文件生成),动画文件格式要求请参考FAQ10590。

    ====== Step 4: Enable Shutdown Animation 以及关机/重启时间控制======

    /vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/MtkShutdownThread.java

        ///added for Shutdown animation @{
        -private static final int MIN_SHUTDOWN_ANIMATION_PLAY_TIME = 5 * 1000;
        +private static int MIN_SHUTDOWN_ANIMATION_PLAY_TIME = 5 * 1000;
    
        @Override
        protected boolean mIsShowShutdownSysui() {
    +        if(SystemProperties.getInt("persist.sys.shutanimation", 0) == 0){
    +            return true;
    +        } else
            // for Shutdown animation
            if(isCustBootAnim()== ANIMATION_MODE) {
                //Show Animation ,No Sysui.
                return false;
            }
            // Show Shutdown SysUI
            return true;
        }
    
        // added for Shutdown animation
        private void shutdownAnimationService() {
            if(isCustBootAnim()!= ANIMATION_MODE) {
                    return;
            }
            /* M: fix shutdown animation timing issue */
            Log.i(TAG, "set service.shutanim.running to 1");
            SystemProperties.set("service.shutanim.running", "1");
    
            //*/ hct.sjt, 2019-02-20, modify for reboot animation play time delay start.
    +        if (((MtkShutdownThread)sInstance)
    +                    .mContext.getResources().getBoolean(
    +                    com.mediatek.internal.R.bool.reboot_animation_play_time_delay) || (mReboot == true)) {
    +            Log.i(TAG, "hct shutdownAnimationService delayForPlayAnimation");
    +            delayForPlayAnimation();
    +        } else if ((mReboot == true && mReason != null && mReason.equals("recovery")) ||
                    (mReboot == false)) {
                delayForPlayAnimation();
            }
        }
    
        private boolean showShutdownAnimation(Context context) {
    +        if(SystemProperties.getInt("persist.sys.shutanimation", 0) == 0){
    +            return false;
    +        }
            beginAnimationTime = 0;
            if (isCustBootAnim()== ANIMATION_MODE) {
                configShutdownAnimation(context);
                // Show Shutdown Animation
                bootanimCust(context);
                return true;
            }
            return false;
        }
    
        private static void bootanimCust(Context context) {
            boolean isRotaionEnabled = false;
            // [MTK] fix shutdown animation timing issue
            SystemProperties.set("service.shutanim.running", "0");
            Log.i(TAG, "set service.shutanim.running to 0");
            try {
                isRotaionEnabled = Settings.System.getInt(context.getContentResolver(),
                        Settings.System.ACCELEROMETER_ROTATION, 1) != 0;
                if (isRotaionEnabled) {
                    final IWindowManager wm = IWindowManager.Stub.asInterface(
                            ServiceManager.getService(Context.WINDOW_SERVICE));
                    if (wm != null) {
                        wm.freezeRotation(Surface.ROTATION_0);
                    }
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.ACCELEROMETER_ROTATION, 0);
                    Settings.System.putInt(context.getContentResolver(),
                            MtkSettingsExt.System.ACCELEROMETER_ROTATION_RESTORE, 1);
                }
            } catch (NullPointerException ex) {
                Log.e(TAG, "check Rotation: context object is null when get Rotation");
            } catch (RemoteException e) {
                e.printStackTrace();
            }
    
    +        // hct add for shutdown animation play time start at 2018-05-22
    +        if (context.getResources().getInteger(
    +                com.mediatek.internal.R.integer.shutdown_animation_play_time) != 0) {
    +            MIN_SHUTDOWN_ANIMATION_PLAY_TIME = context.getResources().getInteger(
    +                    com.mediatek.internal.R.integer.shutdown_animation_play_time);
    +            Log.i(TAG, "hct  mtkShutdownThread bootanimCust MIN_SHUTDOWN_ANIMATION_PLAY_TIME = " + MIN_SHUTDOWN_ANIMATION_PLAY_TIME);
    +        }
    +        // hct add for shutdown animation play time end at 2018-05-22
    
            beginAnimationTime = SystemClock.elapsedRealtime() + MIN_SHUTDOWN_ANIMATION_PLAY_TIME;
            //Disable key dispatch
            try {
                final IWindowManager wm = IWindowManager.Stub.asInterface(
                        ServiceManager.getService(Context.WINDOW_SERVICE));
                if (wm != null) {
                    wm.setEventDispatching(false);
                }
            } catch (RemoteException e) {
                e.printStackTrace();
            }
            //Disable key dispatch
            startBootAnimation();
        }
    
    
    
        private static int getScreenTurnOffTime(Context context) {
            int screenTurnOffTime = 0;
            try {
                screenTurnOffTime = getScreenTurnOffTime();
    +            // hct add for shutdown animation play time start at 2018-05-22
    +            if (context.getResources().getInteger(
    +                    com.mediatek.internal.R.integer.shutdown_animation_play_time) != 0) {
    +                screenTurnOffTime = context.getResources().getInteger(
    +                        com.mediatek.internal.R.integer.shutdown_animation_play_time);
    +                Log.i(TAG, "hct screen turn off time shutdown_animation_play_time =" + context.getResources().getInteger(
    +                        com.mediatek.internal.R.integer.shutdown_animation_play_time));
    +            }
    +            // hct add for shutdown animation play time end at 2018-05-22
                Log.i(TAG, "screen turn off time screenTurnOffTime =" + screenTurnOffTime);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return screenTurnOffTime;
        }
    
        public static int isCustBootAnim() {
    +        int mode = DEFAULT_MODE;
    +        if(mShutOffAnimation == -1) {
    +            mode = ANIMATION_MODE; //Enable Shutdown Animation
    +            mShutOffAnimation = mode;
    +            Log.i(TAG,"mShutOffAnimation: " + mode);
    +            return mode;
    +        } else {
                return mShutOffAnimation;
            }
        }
    }
    

    vendor/mediatek/proprietary/frameworks / base/res/res/values/config.xml

        <integer name="shutdown_animation_play_time">6000</integer>
        <bool name="reboot_animation_play_time_delay">true</bool>
    

    vendor/mediatek/proprietary/frameworks / base/res/res/values/symbols.xml

      <java-symbol type="integer" name="shutdown_animation_play_time" />
      <java-symbol type="bool" name="reboot_animation_play_time_delay" />
    

    ====== Step5: Init AudioPath ======

    vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/BootAnimation.cpp

    #define PATH_COUNT 3
    // add by songhui
    #include <binder/IServiceManager.h>
    #include "ITerService.h"
    #define REGIONAL_BOOTANIM_GET_MNC   "persist.vendor.bootanim.mnc"
    // add by songhui
    
        mAssets.addDefaultAssets();
    	// add by songhui
    //    sp<IBinder> dtoken(SurfaceComposerClient::getBuiltInDisplay(
    //            ISurfaceComposer::eDisplayIdMain));
      +  sp<IBinder> dtoken(SurfaceComposerClient::getInternalDisplayToken()); 
    	// add by songhui
        DisplayInfo dinfo;
    
       sp<MediaPlayer> mediaplayer;
    	// add by songhui
     +   const char* resourcePath = initAudioPath();
    
    void BootAnimation::initBootanimationZip() {
        ZipFileRO* zipFile = NULL;
        String8     ZipFileName;
    	// add by songhui
    +    char BootanimFileName[PROPERTY_VALUE_MAX];
    #ifdef MSSI_MTK_CARRIEREXPRESS_PACK
        char OPTR[PROPERTY_VALUE_MAX];
    
    

    ====== Step6: Add mtkbootanimation Packages ======

    Add mtkbootanimation packages to device.mk, and make clean before rebuild all load.

    Add below codes in alps\device\mediatek$(platform_name)\device.mk

    ifeq ($(strip $(HCT_BOOTANIM)), yes)
        PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
        persist.sys.bootanimation=1 
    endif
    
    ifeq ($(strip $(HCT_SHUTANIM)), yes)
        PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
        persist.sys.shutanimation=1 
    endif
     
     PRODUCT_PACKAGES += mtkbootanimation \
                            libmtkbootanimation
    

    ====== Step7: add selinux ======
    /device/mediatek/sepolicy/basic/non_plat/mtkbootanimation.te
    #add
    #add by songhui

    allowxperm mtkbootanimation proc_ged:file ioctl {0x6700 0x6704 0x6765 0x6766 0x6767};
    allowxperm mtkbootanimation proc_perfmgr:file ioctl {0x6701 0x6703 0x6710 0x6763 0x670f};
    

    #add
    ====== Step8: 解决首次开机无铃声======
    frameworks/av/services/audioflinger/Threads.cpp

                    // if stream volume was successfully sent to the HAL, mLeftVolFloat == v here and we
                    // remove stream volume contribution from software volume.
                    if (v != 0.0f && mLeftVolFloat == v) {
                       vlf = min(1.0f, vlf / v);
                       vrf = min(1.0f, vrf / v);
                       vaf = min(1.0f, vaf / v);
                   }
                }
    			//add by songhui begin
    			char mvalue[PROPERTY_VALUE_MAX] = { 1 };
    			property_get("service.bootanim.exit", mvalue, "");
    			if (strcmp(mvalue,"0") == 0){
    				ALOGE("bootanim volume setting");
    				vlf = 0.25f;
    				vrf = 0.25f;
    			}
    			//add by songhui end            
                // XXX: these things DON'T need to be done each time
                mAudioMixer->setBufferProvider(trackId, track);
                mAudioMixer->enable(trackId);	
    

    device/mediatek/sepolicy/basic/non_plat/audioserver.te

    # add boot audio
    allow audioserver bootanim:binder call;
    
    展开全文
  • Android P版自定义开关机动画

    千次阅读 2018-09-29 21:36:34
    Android P版自定义开关机动画   Google default关机流程只显示进度条,不会播放关机动画。如需自定义开关机动画,建议使用mtkbootanimation进行客制化   [SOLUTION] ====== Step 1: Enable MtkBootanimation...
  • Ultra-Pull-To-Refresh 自定义下拉刷新视差动画

    万次阅读 多人点赞 2016-12-04 02:20:37
    下拉刷新视差动画也是这几天公司的一个动画,今晚终于不用加班了,加上好多小伙伴问我这个效果...首先要说明,今天讲的是自定义下拉刷新动画,不是下拉刷新框架怎么写,所以就算不是你想要的,你看看也无防哈哈哈哈……
  • 以前没学属性动画的时候,是用图片+定时器的方式来完成的,最近一直在学习动画这一块,再加上复习一下自定义view的相关知识点,所以打算用属性动画自定义view的方式来完成这个功能,将它开源出来,供有需要的人...
  • word动画控件

    2013-03-29 15:22:41
    word中播放gif格式图片 1、解压缩。 2、复制文件“AniGIF.ocx”到“\windows\system32\”文件夹下。 3、打开“Word选项”-->“常用”选项-->右侧窗格中勾选“在功用区显现"开发工具"选项卡”复选项。 4、回到页面...
  • 根据结构化的word文档,智能分析文字内容,快速、自动转换生成动画ppt,并有多种模板、徽标和用户自定义供选择。
  • 小程序类似与Vue.js,Angular.js这样的模板引擎,这类MVVM的数据驱动框架能快速的开发项目,但是在做小程序时必会遇到的一个问题就是弹窗非常生硬,没有过渡动画。下面的源码未例一个有动画的小程序弹窗 代码片段...
  • O版自定义开关机动画 O较前面的版本有更改,为方便自定义开关机动画我司,使用mtkbootanimation自定义开关机动画; [SOLUTION]  O版会根据配置生成bootanimation或者mtkbootanimation,只会生成一个;如果要...
  • 学习微信小程序组件之后,一直都是使用别人的组件开发的,刚看到一篇文章讲解微信小程序自定义组件通俗易懂的开发案例觉得一看就会自己写组件了,真的很棒,感谢原作者的手把手教你实现微信小程序中的自定义组件,...
  • 现如今的APP各式各样,同样也带来了各种需求,一个下拉刷新都能玩出花样了,前两天订饭的时候不经意间看到了“百度外卖”的下拉刷新,今天的主题就是它–自定义下拉刷新动画。 看一下实现效果吧:  动画 ...
  • 上几篇给大家分别讲了ValueAnimator和ObjectAnimator,相比而言ObjectAnimator更为方便而且...但ValueAnimator和ObjectAnimator都只能单单实现一个动画,那如果我们想要使用一个组合动画,比如边放大,边移动,边改变al
  • Word入门动画教程142:应用样式(转)[@more@]  段落样式用于定义整个段落,字符样式用于定义选定的文本,其中,最常用到的是段落样式。  一、应用样式  (一)使用“样式”下拉列表应用样式的步骤:  1...
  • Word入门动画教程144:修改样式(转)[@more@]  修改样式的方法与创建样式稍有不同,可按如下步骤进行:  1.执行“格式”→“样式和格式”(或单击“格式”工具栏上的“格式创格”按钮),显示“样式和格式”任务窗.....
  • Word2003是微软公司提供的一款文字处理软件,可以对文字进行...动画演示:一、插入特殊字符①将鼠标放置要插入特殊符号的位置。②单击菜单栏“插入”→“符号”,打开“符号”对话框,然后切换到“特殊字符”标签...
  • Word入门动画教程145:给样式配快捷键(转)[@more@]  如果经常使用某个样式,为其设置快捷键是提高效率的好办法,操作步骤如下:  1.执行“格式”→“样式和格式”,打开“样式和格式”任务窗格。  2.在“...
  • Word2003是微软公司提供的一款文字处理软件,可以对文字进行排版和编辑、分段等各种处理...动画演示:①单击菜单栏“文件”—“页面设置”,在弹出的“页面设置”对话框中,切换到“版式”标签。② 单击“边框”按...
  • Word共有5种对齐方式:左对齐、右对齐、居中对齐、两端对齐和分散对齐。  设置段落对齐方式最简捷的方法是使用“格式”工具栏上的按钮,但默认情况下,“左对齐”按钮并不显示,我们可以执行“工具”→“自定义”...
  • 最近看到App上一个不错的导航效果:一个导航滑动的效果,被选中的背景会有变化,会随着fragment的滑动有个位移动画。感觉挺有意思。 两种方式:第一种:  使用TabLayout实现效果,第二种使用自定义TabLayout实现...
  • Word入门动画教程81:改变图形的填充颜色(转)[@more@]  在前面的教程中,已多次对自选图形、文本框等对象进行过颜色填充的操作,但都比较简单。使用“绘图”工具栏上的“填充颜色”按钮,可以为图形对象添加更为...
  • Word2003是微软公司提供的一款文字处理软件,可以对文字进行排版和编辑、分段等各种处理,最终将编辑好的内容打印出来,是办公室一族中必备的办公软件之一。...动画演示: ​ 一、使用“格式”工具栏
  • 《Android自定义控件三部曲文章索引》 上几篇给大家分别讲了ValueAnimator和ObjectAnimator,相比而言ObjectAnimator更为方便而且由于set函数是在控件类内部实现,所以封装性更好。而且在现实使用中一般而言都是...
  • Word2003是微软公司提供的一款文字处理软件,可以对文字进行排版和编辑、分段等各种处理,最终将编辑好的内容打印出来,是办公室一族中必备的办公软件之一。对齐方式是段落内容在文档的左右边界之间的横向排列方式,...
  • GPS平台、网站建设、软件...可是GIF图片插入Word文档后却变成了静态画面,表现效果大打折扣。让我们装一个小控件,让 图片动起来! 第一步:登录http://www.officefans.net/cdb/attachment.php?aid=1034下载控件(快

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,826
精华内容 4,330
关键字:

word自定义动画