自定义动画教案

2025-06-17|版权声明|我要投稿

自定义动画教案(精选11篇)

1.自定义动画教案 篇一

课题:5.3.1自定义动画

一、教材分析

1、教学大纲说明: 【教学要求】

1)会设置演示文稿的放映方式;

2)会根据播放要求选择播放时鼠标指针的效果、切换幻灯片方式; 3)会对演示文稿打包,生成可独立播放的演示文稿文件; 4)会设置幻灯片对象的动画方案;

5)熟练设置并合理选择幻灯片之间的切换方式;

2、我的理解:

【本章中的地位和作用】

1)演示文稿成为各行各业展示交流的通用软件,具有广泛的应用; 2)动画效果可以为演示文稿增加动态效果,就有重要的渲染作用;

3)制作演示文稿是幼儿教师必备技能,能熟练制作ppt课件辅助教学是幼儿教师的基本素质,而动画的制作是课件制作的重点之一; 4)可以进一步加强学生对多媒体辅助教学的应用能力。

【教学重点】

1)幻灯片的切换方式的设置; 2)幻灯片的放映;

3)幻灯片中对象的自定义动画的设置; 4)演示文稿的打包输出。

【教学难点】

1)能根据需要灵活设置幻灯片的切换方式;

2)能根据幻灯片对象的动画需要灵活设置动画方案。

【教材处理】

1)教学中要牢牢把握自定义动画这一中心;

2)教学中以幼儿教学课件为实例紧密结合幼教实际,贯彻“以服务为宗旨、以就业为 导向”的教学指导思想; 3)教学中主要以具体任务和问题的形式给学生学习的目标和知识要点,学生参照课本和学习资料,完成学习过程,并能探索尝试课本中未讲授的内容; 4)把任务进一步分解成小任务,教学任务层层递进,既符合学生的认知特点,又可以降低学习难度; 5)进一步培养学生对多媒体的使用能力,加强学生使用多媒体辅助教学的能力。6)进一步培养学生的自我学习能力,提高学习兴趣。

【课时安排】

本单元内容我准备安排2课时,第一节课重点突破自定义动画这一重点和难点,第二节课通过综合实例重点解决幻灯片切换、放映和打包输出。

下面我所要介绍的是第一节课的内容安排,使用的powerpoint的版本是powerpoint 2003版。

二、学生分析

1)通过前面的学习,学生已经熟悉powerpoint的操作界面,熟练的进行ppt的一些基本编辑操作,已经养成一些基本的操作习惯; 2)大多数学生初中时学习过powerpoint的基本操作,只是版本可能会有所不同,能给幻灯片中的对象添加简单的动画效果,但自定义动画工具的详细选项没有详细的学习研究,尚不能根据需要设置较为复杂的动画效果; 3)经过前面的学习和训练大多数具有一定的理解能力和自学能力,部分学生尚不能独立完成自学任务; 4)大多数学生欠缺拓展学习的能力。

三、教法与学法

教法:任务驱动式、分组学习式(教师以引导为主,根据教学实例和知识点设计适当的问题,采用问题形式给出任务,启发学生思考。根据知识点的难易程度和学生的基础状况分别采用直接提问回答、教师引导学生自学、小组讨论等不同的方式处理教学内容。)

学法:自主式学习、合作学习

四、教学案

目标要求:

(1)通过实例了解自定义动画的主要内容和设立动画的意义;(2)掌握给幻灯片中的对象添加自定义动画的基本步骤和方法;(3)进一步掌握放映幻灯片的方法;

(4)能熟练的根据实际需要为幻灯片中的对象设立较为复杂的动画效果;(5)通过实例培养学生制作幼教课件的能力;

(6)进一步培养学生应用计算机和多媒体工具辅助幼教工作的能力,增强学生的学习兴趣。

重点难点:

(1)为对象添加自定义动画的基本步骤和方法。

(2)能够根据演示文稿的需要为幻灯片对象添加适当的动画效果。

教学过程:

【新课引入】

作为未来的幼儿教师能够使用计算机软件熟练地制作幼教课件是每一位同学都应该具备的基本能力。前面我们曾经为幼儿故事《狐狸和乌鸦的故事》制作过一个演示文稿,今天我把这个课件做了一些改动,大家看效果怎么样。<教师演示课件> [问题]:现在的演示文稿和前面的有什么不一样了?现在的效果明显更好了,好在什么地方?

[学生]观察并回答问题。

[教师]演示文稿添加了动画效果,小结添加动画效果的意义。

【讲授新课】

一、自定义动画

1.添加简单的“自定义动画”

[教师]任务一:为第一张幻灯片中的标题“狐狸和乌鸦”添加一个动画效果。[问题]我们先来一个简单的任务,初中的时候我们大多数同学都学习过powerpoint这个软件,好多都学在前面的学习过程中也为幻灯片里的对象添加过动画效果,谁来为第一张幻灯片的标题“狐狸和乌鸦”添加一个动画效果。[学生]请1~2位学生演示自己的操作步骤。注意提示同学一边操作一边解说。教师适时引导。(大约3分钟)

[教师]带领同学一起总结添加“自定义动画”的操作步骤和方法。

法一:菜单:幻灯片放映——自定义动画;

法二:激活任务栏——自定义动画;

法三:在要添加的对象上右键单击——自定义动画。操作步骤:

第一步:选中对象;

第二步:打开“自定义动画”任务栏;

第三步:点击“添加效果”按钮,选择适当的动画类型,根据需要调整选项。【强调】:根据不同的对象设置恰当的动画效果非常重要,恰当的动画效果可以给演示文稿增光添彩,不适当的效果只会起到相反的作用。

2.自定义路径与动画播放时间的设定

[教师]任务二:自定义路径与动画播放时间的设定。[问题]

1、注意看第二章幻灯片的两个动画的动画效果和播放的时间,这两个效果是怎么做出来的?

2、第一个动画是在幻灯片开始的时候自动播放,而第二个动画的播放时间是单击鼠标后播放,你知道怎样设置播放时间吗?动手试一试吧!

[学生]动手观察自定义动画任务栏的选项卡,哪些选项能设定动画开始播放的时间?如何设置能达到我们想要的效果?

[学生]自己动手探索,完成后小组交流。

[教师]请一个小组的一位同学介绍学习的结果并演示操作步骤。

教师引领学生小结:(1)添加适当的动画方式;

(2)自定义动画中绘制自定义路径要注意的问题;

(3)动画开始时间的设定方法,以及三个选项的具体效果。3.动画的速度和重复次数

[教师]任务三: 设置动画播放的速度和重复的次数。[问题]

1、注意看第三张幻灯片中的动画效果,所有的动画是同时开始的,如何设置?

2、狐狸流下的口水是由上往下流的,而且动画是不断重复播放的,如何制作这样的效果?

[学生]小组探究添加的效果和重复播放的设置。

[教师]巡回指导,注意观察,请已经完成的两个小组的同学代表汇报本小组所找到的方法。

[学生]汇报本小组的答案。其他同学给以补充。[教师]小结:

动画播放的速度和重复次数的设置:

1、步骤:点击动画选项—点击下拉按钮,选择“计时”—设置速度和重复次数即可。

2、注意:各种速度实际上是有时间设定的,各为0.5秒、1秒、2秒、3秒、5秒;重复次数中“直到幻灯片末尾”选项一般只用在声音文件的播放上。

4.添加声音效果

[教师]任务四:给动画添加声音效果。[问题] 注意:第四张幻灯片中有播放动画的同时有声音在播放,你知道怎么做吗?

[学生]思考、尝试、小组讨论交流。

[教师]请两个小组的同学汇报小组讨论的结果。(解决声音的问题可以直接插入声音文件,设置播放声音的时间,也可以在动画设置中的效果选项中使用声音选项卡来添加。第一种方法学生较容易想到,而第二种方法不容易想到,而且就算知道可以使用声音选项卡但很可能不知道如何添加powerpoint外部声音文件,需要教师适当提示引导。)

[教师]小结:

为动画添加声音的方法: 法一:直接插入外部声音文件;

法二:使用动画效果中的声音选项卡,点击其它声音,引入外部声音文件。[备注]此处请同学们完成剩余幻灯片中的动画效果的设置,并放映演示文稿观看动画效果。

二、设置放映方式

[教师]任务五:为演示文稿设置放映方式。

[问题]同学们,我在放映演示文稿时遇到了一个小问题,我发现我放映时鼠标不管用了,你们直到怎么回事吗?谁能帮帮我?

[学生]小组探究交流。该问题抢答!找到解决问题方法的同学立刻请举手示意。[教师]请同学演示并解答,教师点评。小结:

(1)设置放映方式的步骤:菜单:幻灯片放映---设置放映方式---设置放映类型等选项卡即可。

(2)根据放映环境的不同设置放映方式,一般采用“演讲者放映”的方式。

[本节课小结]本节课的主要内容:

一、自定义动画: 1)添加动画效果;

2)设置动画放映的效果:开始时间、速度、重复次数、声音等;

二、设置放映方式: 1)演讲者放映; 2)观众自行浏览; 3)在展台浏览。[作业] 看课本144-150页,自定义动画、幻灯片放映部分内容。练习课上完成“真我风采”演示文稿的动画设置。

2.自定义动画教案 篇二

本课是长春出版社出版的《信息技术》七年级下册第八课的内容。这节课是本单元的一个亮点, 让制作的素材动起来, 增强学生的学习兴趣。我根据学生的具体情况把课本上关于自定义动画的内容, 设计为让海宝进行平移、旋转的动画制作。

●学生分析

七年级的学生正处于一个个体发展的加速期, 思维也正处于一个认知发展阶段。这个阶段的学生在小学已经学习过一些PPT基本技能。

●教学目标

知识与能力目标:学会运用PPT中的自定义动画设置平移动画、旋转动画;提高信息处理能力和创造能力;能够正确表达自己的创意。

过程与方法目标:以“任务驱动”为主, 通过独立思考和小组合作交流等学习方式完成自定义动画的加工处理;会使用迁移的方法来学习新知识。

情感、态度和价值观目标:通过欣赏美、创造美的动画设计, 收获审美体验, 享受成功的愉悦, 增强学生对世博会的认识和民族自豪感。

●教学重、难点

重点:学会在PPT中设置平移动画。

难点:旋转动画。

●教学准备及环境

自制PPT课件, 学习任务文件发送到学生机上, 网络畅通的多媒体微机室。

●教学过程

1. 创设情境, 导入新课

师: (打开有关上海世博会的文稿, 如图1) , 同学们认识这是哪里吗?

生:上海世博会的中国馆。

师:那请大家看一下, 远处走来的是谁?

生:海宝。

师:那今天就让我们跟着海宝一起走遍世界吧。

2.平移动画, 探究新知

学习任务一

A.任意选择海宝添加进入动画效果;

B.对2个以上海宝添加进入动画设置;

C.对每个海宝设置多种动画效果。

教师打开学习任务一文件, 演示自定义动画设置:选中对象→右键→自定义动画→添加效果→进入→飞入……任意选择。

学生自由尝试并合作交流, 教师巡视并辅导。

学习任务二

A.对1个海宝进行路径动画设置;

B.对2个以上海宝进行路径动画设置。

请一个学生上讲台边操作边讲解 (如下页图2) 。之后, 下面的学生进行实践操作, 教师巡视指导, 完成之后, 教师演示学生作品并小结。

师:在PPT中自定义动画还可以像Flash一样实现理想的动画效果, 不过需要重新设置动画效果, 根据不同的情况选择合适的动画效果, 下面就让我们来实践操作吧!

3.旋转动画, 合作交流

学习任务三

A.设计1个海宝绕着地球进行旋转;

B.地球自转, 海宝绕着地球转;

C.地球自转, 多个海宝绕着地球不同方向旋转。

师:打开学习任务三 (如图3) , 看一看, 你们发现什么动画效果了?

生:旋转。

师:下面大家试一试你能不能实现这样的动画效果。

自定义动画中有多种动作路径方式, 小组内讨论选择一种合适动画方式进行创作 (参数可自由取舍) 。

要求:必须让地球动起来, 效果合理;海宝要绕着地球转;突出主题, 注意动画设置。

教师巡视并辅导和答疑, 小组选出优秀作品进行展示。

4. 综合运用, 拓展延伸

师:同学们都很聪明, 现在老师又带来一个综合运用PPT的文件, 打开任务四, 这也是运用自定义动画来实现的 (如图4) , 你们想不想知道是怎样实现的呢?

学习任务四

A.按笔顺写出“海”字的第1~2笔;

B.按笔顺写完“海宝!”。

教师进行操作指导:首先选中文字 (艺术字“楷体”) →剪切→编辑→选择性粘贴→选择:图片 (Windows元文件) →确定→选中文字→右键→取消组合 (转换为Microsoft Office图形对象) →选中文字→右键→取消组合→选中第一笔顺→填充颜色→右键→自定义动画→擦除→自左侧→慢速→……

学生动手试一试, 每小组讨论后选出一幅作品, 保存作品。

5. 海宝炫舞, 评价升华

教师机展示典型作品, 首先请学生讲出其制作的设想, 进行自评, 再请学生互评, 最后由教师给予评价。

●教学反思

本节课在总体上进行得比较顺利, 达到了预期的教学目标, 师生在课堂上配合默契, 课堂学习气氛比较浓厚, 无论是欣赏同学的作品, 还是通过自主学习完成教师布置的任务, 学生参与的积极性都非常高。

1.成功之处

我根据书本知识, 将设计好的四个任务及与任务有关的素材提前发到了学生的计算机中, 发现大部分学生都能通过自主学习很好地完成教师交给的任务。在教材中, 重点与难点的内容是放在最后的, 而在教学过程中, 由于学生的主动与积极, 我便将重点与难点的内容往前提了, 取得了较好的效果。

2.不足之处

导入时语言过于随便, 应进一步精简, 如上课以后, 直接讲今天老师带来一个小动画, 请同学们欣赏一下, 这样就能让学生更加明白本节课的重点, 激起学生学习的欲望。

3.ppt自定义动画怎么制作 篇三

1.制作进入动画效果

选中需要设置动画效果的对象,如文本、图片等。单击“动画”选项卡,单击“无动画”后的向下箭头,选择一种动画效果即可,如图1所示。

2.制作强调动画效果

细心的读者会发现,在前一种动画设置中,PowerPoint只提供了对象进入时的动画效果,如要设置退出、强调等效果该怎么办呢?PowerPoint提供了自定义动画效果功能,方便用户定义各种动画。下面就来学习如何制作强调动画效果。

第1步,选中需要设置动画效果的对象。如文本内容。

第2步,单击“动画选项卡”。然后单击“自定义动画”按钮,在窗口的右边会出现“自定义动画”窗格。

第3步,单击“添加效果”按钮,选杼“强凋”。在展开的菜单中选择一种强调效果,如“放大/缩小”,如图2所示。

第4步,在“自定义动画”窗格中会添加一^动作条目。选中该动作条目,在“开始”中设置动画的触发事件,如“单击鼠标”,或“之前”或“之后”触发动画。在“速度”中可设置动画的速度。如图3所示。单击“播放”按钮或“放映幻灯片”按钮,可预览效果。

3.制作退出动画效果

为标题、文本、图片等设置了进入、强调动画后,有时还需要为其设置退出动画效果,例如,需要在同一个位置显示多个对象。当出现一个对象后,一定时间后退出,然后再出现其他对象。退出动画效果的制作,与强调动画效果的制作方法类似,可参照进行设计。

4.制作动作路径动画效果

前面学习的几种动画效果,我们都不能按自己的想法设定对象的运动路径,那么如何才能让幻灯片中的文本或图片,按照自己的意愿运动呢?其这也很简单,我们只需要事先设置运动物体的运动路径,当播放幻灯片时,该物体就会按我们指定的路线进行运动了。以制作图4中的“小从左向右循环游动为例进行介绍。

第1步,在幻灯片中插入金龟动画,并将其移动到幻灯片的左下角。

第2步,选中插入的金#.图片,单击动画“动画选项卡”,单击“自定义动画”按钮,打开“自定义动画”窗格。

第3步,单击“添加效果”按钮,选择“自定义路径”,选择“向右”即可创建金鱼从左向右移动的效果,如图5所示。

第4步,在“自定义动画”窗格中单击新建动画项右边的向下箭头,选择“计时”项,如图6所示,弹出向右对话框。

第5步,在“开始”中选择“单击时”以外的项,在“重复”中选择“直到幻灯片末尾”,即出现金鱼所在幻灯片,金鱼就开始从左向右游动,直到最后一张幻灯片,如图7所示。设置好后单击“确定”按钮即可。

5.制作声音效果

利用前面几种方式制作的动画,在默认情况下是没有声音的,那么如何制作有声音画效果呢?下面继续上一例中的制作,为金鱼出见时添加一种声音效果。

第1步,选巾添加的金龟图片,打开“自定义动画”窗口,单出金鱼动画后的向下箭头,选择“效果选项”。

第2步,在“声音”中选择一种声音效果,如“风铃”,如图8所示,单击“确定”按钮即可。

6.调整动画播放顺序

当在幻灯片中新建了多个动画后,如果要调整动画的播放顺序,可单击“自定义动画”窗格中“重排顺序”左右的方向箭头来实现。

1.ppt翻书动画效果怎么制作

2.PPT怎么转换成SWF动画

3.ppt怎么插入flash动画

4.ppt星星闪烁效果怎么制作

5.怎么使用PPT截图

6.关于电脑自定义声音的设置

7.ppt自动循环播放怎么设置

8.ppt默认视图怎么打开

9.ppt中怎么插入声音

4.自定义动画教案 篇四

设计

#TRS_AUToADD_1257211609989{mARGIN-ToP:0px;mARGIN-BoTTom:0px}#TRS_AUToADD_1257211609989P{mARGIN-ToP:0px;mARGIN-BoTTom:0px}#TRS_AUToADD_1257211609989TD{mARGIN-ToP:0px;mARGIN-BoTTom:0px}#TRS_AUToADD_1257211609989DIV{mARGIN-ToP:0px;mARGIN-BoTTom:0px}#TRS_AUToADD_1257211609989LI{mARGIN-ToP:0px;mARGIN-BoTTom:0px}/**---jSoN--{“":{”margin-top“:”0“,”margin-bottom“:”0“},”p“:{”margin-top“:”0“,”margin-bottom“:”0“},”td“:{”margin-top“:”0“,”margin-bottom“:”0“},”div“:{”margin-top“:”0“,”margin-bottom“:”0“},”li“:{”margin-top“:”0“,”margin-bottom“:”0“}}--**/DIV.myFav_1256697430170P.msoNormal{TEXT-jUSTIFy:inter-ideograph;FoNT-SIZE:10.5pt;mARGIN:0cm0cm0pt;FoNT-FAmILy:”TimesNewRoman“;TEXT-ALIGN:justify}DIV.myFav_1256697430170LI.msoNormal{TEXT-jUSTIFy:inter-ideograph;FoNT-SIZE:10.5pt;mARGIN:0cm0cm0pt;FoNT-FAmILy:”TimesNewRoman“;TEXT-ALIGN:justify}DIV.myFav_1256697430170DIV.msoNormal{TEXT-jUSTIFy:inter-ideograph;FoNT-SIZE:10.5pt;mARGIN:0cm0cm0pt;FoNT-FAmILy:”TimesNewRoman";TEXT-ALIGN:justify}DIV.myFav_1256697430170A:link{coLoR:#003399;TEXT-DEcoRATIoN:none}DIV.myFav_1256697430170SPAN.msoHyperlink{coLoR:#003399;TEXT-DEcoRATIoN:none}DIV.myFav_1256697430170A:visited{coLoR:purple;TEXT-DEcoRATIoN:underline}DIV.myFav_1256697430170SPAN.msoHyperlinkFollowed{coLoR:purple;TEXT-DEcoRATIoN:underline}DIV.myFav_1256697430170DIV.Section1{page:Section1} 【教学目标】

1.通过本节的学习要求学生熟练地掌握给幻灯片中的文本或图片设置动画;

2.通过本节的学习使学生掌握如何使用自定义动画,设置动画对象的动态效果和动画顺序;

3.通过教学培养学生的审美观和创新精神。

【教学准备】

教师用,学生用,宣传片。

【教学时间】

1课时

【教学过程】

一、创设情境,谈话导入

前段时间,学校举行了经典诵读比赛,咱们班有没有同学被评为校级小明星啊?(继续努力,争取明年班里出现更多的校级小明星!)

二、揭题解题

导入:羊村的村长“慢羊羊”,听说同学们能背这么多诗,非常羡慕,所以决定在村子里也举行一次经典诵读比赛,许多选手参加了比赛,请注意观察这些选手是怎样走上舞台的?有“喜羊羊”,“美羊羊”,“懒羊羊”。呀!“灰太狼”真不听话,没接到邀请自己就跑过来。

谁来说一说各选手是怎么样走上舞台的?

今天这节课我们就来做个小小导演,安排这些选手一个个的走上舞台!

请同学们打开桌面上的“喜羊羊”文件夹,打开里面的文件,今天我们学习的自定义动画就藏在快捷菜单和幻灯片放映里。请找找看,试着给“喜羊羊”加上飞入舞台的效果。

三、自主探究,初探自定义动画

(一)自定义动画的位置

谁找到了?(介绍得真清楚。有没有更简单的方法?效果加上以后,我们要在放映状态下才可以看到动画的实际播放效果。)

(二)修改效果的设置

刚才“喜羊羊”是从果园飞入舞台,“懒羊羊”出现的时候动作非常慢,“灰太狼”非常不听话,自己就出现了。下面三位同学为一小组,商量操作一下,在自定义动画任务窗格中,修改哪项设置可以实现它们各自的出现效果。咱们看一看哪个小组完成得又快又准。

小组商量讨论。

哪个小组来展示一下你们的合作成果。

小组汇报。非常好。利用修改设置的方向、速度,我们可以改变角色的入场方向和速度,利用开始设置可以设置角色自动出现在舞台上。

好,各选手已经做好准备了,下面比赛正式开始。

(三)顺序设置

1.第一个上场的是“美羊羊”,它背了一首《春雪》。

2.同学们会背吗?一起来背一下。

3.那“美羊羊”是怎样背的呢?学生观察发现错误。

4.文字的出现顺序反了,那你能帮它调整好吗?

5.学生上机操作调整文字顺序。成功的同学帮一下其他同学

6.哪位同学乐意把你的操作方法给同学们介绍一下。

7.学生上机汇报。

第一种方法是拖动鼠标的方法:用这种方法完成操作的请举手。

第二种方法是利用了重新排序的按钮,用这种方法完成操作的请举手。在操作中只要注意观察,多动手,同样的问题总有不同的解决方法。

四、小结:今天这节课我们学习了自定义动画的添加效果和修改设置,在修改设置里一共有几项设置?开始、方向、速度、顺序。在设置动画时,我们要注意根据角色特点设置相应的动作和效果。

五、实战演习

1.下面我们将入实战演习,做一名真正的小导演。

请打开桌面上的小试身手文件夹,选择自己喜欢的情境文件,编故事,做动画。

要求:故事要简要,精彩,动画要符合角色特点。

2.学生上机操作。

3.教师指导。

4.咱们请一位同学讲讲他的动画故事。

学生在学生机上演示自己的作品,讲故事情节。

六、结束

5.自定义动画教案 篇五

动画演示:

①单击菜单栏中的“幻灯片放映”—“自定义放映”命令,打开“自定义放映”对话框,

ppt2003入门动画教程34:设置自定义播放方式

②单击其中的“新建”按钮,打开“定义自定义放映”对话框。

www.dnzg.cn

③输入一个放映方案名称(如“高级”),然后在Ctrlt键的协助下,选择需要放映的幻灯片,然后按下“添加”按钮后再按“确定”返回。

6.自定义动画教案 篇六

在实际开发中消息提示时很常见的需求,为了个性化和拥有简洁的UI状态栏提示是比较好的方案,好处很多如:不遮挡主UI,新意,下面贴出实现代码,

WHC_StatusBarMessage.h头文件如下:

//// WHCStatusBarMessage.m// WHCStatusBarMessage//// Created by apple on 14-3-28.// Copyright (c) apple. All rights reserved.//#import “WHC_StatusBarMessage.h”#define kPading (5.0) //边距#define kLogoWidth (15.0) //图标logo宽度@interface WHC_StatusBarMessage{ UILabel * msgLab; //消息标签 UIImageView * logoImgV; //logo图标对象 UIImage * logoImg; //logo图标 CGFloat height; //高度 CGFloat screenWidth; //屏幕宽度 CGFloat screenHeight; //屏幕高度}@property(nonatomic,retain)UILabel * statusLab;@property(nonatomic,retain)UIImageView * logImgView;@property(nonatomic,retain)NSTimer * runTimer; //停留时钟@end@implementation WHC_StatusBarMessagestatic WHC_StatusBarMessage * msb;//构建单例+(WHC_StatusBarMessage *)shareStatusBar{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ msb = [[WHC_StatusBarMessage alloc]init]; }); return msb;}//初始化UI-(id)init{ CGRect statusFrame. = [UIApplication sharedApplication].statusBarFrame; height = statusFrame.size.height; screenWidth = [UIScreen mainScreen].bounds.size.width; screenHeight = [UIScreen mainScreen].bounds.size.height; self = [super initWithFrame.:statusFrame]; if(self){ self.frame. = statusFrame; self.autoresizingMask = UIViewAutoresizingFlexibleWidth; self.windowLevel = UIWindowLevelStatusBar + 1.0; self.backgroundColor = kWHC_StatusBarMessageBack_Color; logoImg = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@“29x29” ofType:@“png”]]; logoImgV = [[UIImageView alloc]initWithFrame.:CGRectMake(kPading, kPading / 2.0, kLogoWidth, kLogoWidth)]; logoImgV.backgroundColor = [UIColor clearColor]; [self addSubview:logoImgV]; msgLab = [[UILabel alloc]initWithFrame.:CGRectMake(logoImgV.frame.origin.x + kPading + logoImgV.frame.size.width, 0.0, screenWidth - (logoImgV.frame.origin.x + kPading + logoImgV.frame.size.width), statusFrame.size.height)]; msgLab.backgroundColor = [UIColor clearColor]; msgLab.font = [UIFont systemFontOfSize:14.0]; msgLab.textColor = [UIColor whiteColor]; [self addSubview:msgLab]; //注册单击事件 UITapGestureRecognizer * tapStatusBar = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapTopBar:)]; [self addGestureRecognizer:tapStatusBar]; //注册状态栏方向监听事件 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(screenOrientationChange:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil]; } return self;}//处理单击状态栏消息- (void)tapTopBar:(UITapGestureRecognizer *)tapGesture{ if(_whcStatusBardelegate && [_whcStatusBardelegate respondsToSelector:@selector(didTapTouchWHCStatusBarMessageDoSomething)]){ [_whcStatusBardelegate didTapTouchWHCStatusBarMessageDoSomething]; }}//显示状态栏消息-(void)showTextMessage:(NSString*)strMessage delayTime:(NSInteger)delay{ [self.runTimer invalidate]; self.runTimer = nil; if(logoImg == nil){ logoImg = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@“29x29” ofType:@“png”]]; } if(delay == -1) delay = 3; logoImgV.image = logoImg; msgLab.text = strMessage; __block CGRect stateFrame. = self.frame; stateFrame.origin.y = -20.0; self.frame. = stateFrame; [UIView animateWithDuration:0.2 animations:^{ stateFrame.origin.y = 0.0; self.frame. = stateFrame; }]; [self makeKeyAndVisible]; self.runTimer = [NSTimer scheduledTimerWithTimeInterval:delay target:self selector:@selector(dismissTimer) userInfo:nil repeats:NO];}-(void)showMessage:(NSString*)strMessage logImage:(UIImage *)logImage delayTime:(NSInteger)delay{ logoImg = logImage; [self showTextMessage:strMessage delayTime:delay];}-(void)dismissTimer{ double delayInSeconds = 0.3; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ msb.hidden = YES; });}#pragma mark - screenChange-(void)screenOrientationChange:(NSNotification*)notif{ UIInterfaceOrientation rientation = [[[notif userInfo] objectForKey:UIApplicationStatusBarOrientationUserInfoKey] integerValue]; switch (orientation) { case UIInterfaceOrientationPortrait:self.transform. = CGAffineTransformIdentity;self.frame. = CGRectMake(0.0, 0.0, screenWidth, height);break; case UIInterfaceOrientationPortraitUpsideDown:self.transform. = CGAffineTransformMakeRotation(M_PI);self.center = CGPointMake(screenWidth / 2.0, screenHeight - height / 2.0);self.bounds = CGRectMake(0.0, 0.0, screenWidth, height);break; case UIInterfaceOrientationLandscapeLeft:self.transform. = CGAffineTransformMakeRotation(-M_PI_2);self.center = CGPointMake(height / 2.0, screenHeight / 2.0);self.bounds = CGRectMake(0.0, 0.0, screenHeight, height);break; case UIInterfaceOrientationLandscapeRight:self.transform. = CGAffineTransformMakeRotation(M_PI_2);self.center = CGPointMake(screenWidth - height / 2.0, screenHeight / 2.0);self.bounds = CGRectMake(0.0, 0.0, screenHeight, height);break; default:break; }}@end

7.自定义动画教案 篇七

今天的案例是这样的,我们有两个App,一个叫做cpHost,作为内容提供者;另外一个叫做cpTest,专门用来操作这个cpHost中的数据。我们的cpHost中有一个数据库,该数据库中有一个User表,我们通过内容提供者将这个User表共享出去,供其他App调用。下面我们就来看看怎么实现这样一个效果。

既然用到数据库存储用户表,那么毫无疑问我们需要一个DBHelper,如下:

public class DBHelper extends SQLiteOpenHelper { public static final String USERTABLE = user_table; public DBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE TABLE IF NOT EXISTS + USERTABLE + (_id INTEGER PRIMARY KEY AUTOINCREMENT,USERNAME TEXT,NICKNAME TEXT,GENDER TEXT,AGE TEXT);); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}我们创建一个用户表,然后在在MainActivity中将该表中的数据显示出来,这样方便我们后面看到操作效果,于是我们需要一个listview,看看MainActivity的布局文件:

MainActivity.java:

public class MainActivity extends Activity { private ListView lv; private DBHelper helper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) this.findViewById(R.id.lv); } public ListgetData { helper = new DBHelper(this, lenve.db, null, 1); SQLiteDatabase db = helper.getWritableDatabase(); Listlist = new ArrayList(); Cursor c = db.rawQuery(SELECT * FROM + DBHelper.USERTABLE, null); User u = null; while (c.moveToNext()) { String username = c.getString(c.getColumnIndex(USERNAME)); String nickname = c.getString(c.getColumnIndex(NICKNAME)); String gender = c.getString(c.getColumnIndex(GENDER)); String age = c.getString(c.getColumnIndex(AGE)); u = new User(username, nickname, gender, age); list.add(u); } c.close(); return list; } @Override protected void onResume() { super.onResume(); lv.setAdapter(new MyAdapter(this, getData())); }}这里之所以把给ListView设置Adapter的方法放在onResume()方法中执行,主要是为了测试方便,没有其他意思,那么我们在来看看UserBean:

public class User { private String username; private String nickname; private String gender; private String age; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public User(String username, String nickname, String gender, String age) { this.username = username; this.nickname = nickname; this.gender = gender; this.age = age; } public User() { }}还有一个MyAdapter:

public class MyAdapter extends BaseAdapter { private Context context; private Listlist; public MyAdapter(Context context, Listlist) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.lv_item, null); holder = new ViewHolder(); holder.ageTv = (TextView) convertView.findViewById(R.id.age_tv); holder.nickNameTv = (TextView) convertView.findViewById(R.id.nickname_tv); holder.userNameTv = (TextView) convertView.findViewById(R.id.username_tv); holder.genderTv = (TextView) convertView.findViewById(R.id.gender_tv); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } User u = list.get(position); holder.ageTv.setText(u.getAge()); holder.genderTv.setText(u.getGender()); holder.nickNameTv.setText(u.getNickname()); holder.userNameTv.setText(u.getUsername()); return convertView; } class ViewHolder { TextView userNameTv, nickNameTv, genderTv, ageTv; }}这些都很简单的显示部分的代码,我就不再详细解释。说完这些我们终于可以介绍今天的核心内容了,那就是ContentProvider。我们自定义的ContentProvider首先要继承ContentProvider,继承ContentProvider之后,我们会看到有多个方法需要我们实现,分别onCreate()、query、getType、insert、delete、update,主要是这几个方法,通过方法名字我们都能看出这几个方法的含义,就是执行增删改查操作,其中onCreate在应用启动的时候会调用,我们可以在里边做一些初始化的操作,但是不宜做一些耗时过长的操作,否则会导致应用启动时间变长,造成不好的用户体验。在其他的方法中我们分别执行相应的增删改查操作即可。说到这里,我们不得不介绍ContentProvider中另外一个非常重要的东西,那就是Uri。

Uri是ContentResolver执行CRUD方法时的重要参数,我们可以从Uri中提取出我们要操作的数据对象,要操作哪一条数据等等信息,UriMatcher对象映射Uri的返回码,我们可以使用UriMatcher来方便的知道ContentResolver想要干什么。下面我们举例来说明一下:

content://com.lenve.cphost.mycontentprovider/user/3一般情况下,我们见到的Uri就是这样的,我们可以将Uri分为三部分,第一部分是固定内容,第二部分是authorities,也就是我们在清单文件中注册ContentProvider时的authorities参数,最后一部分表示数据源路径,可有可无,这些根据自己的项目需求随意定义即可,但是这里有一些约定俗成的规则,比如:

1.user多数情况下表示我们要操作的表名,因为一个ContentProvider可能涉及到多个表,通过这里来进行区分。

2.如果user之后没有参数,默认返回当前表中所有数据,或者是操作当前表中所有数据

3.user之后的3表示操作数据库的条件,可以是id,也可以是其他字段。

那么这么长一个字符串我们要怎么提取我们需要的数据呢?难道要用正则?其实不必,这里就用到我们前面说的UriMatcher,使用UriMatcher会自动对我们的Uri进行匹配,但是,在匹配之前我们要先定义一下匹配规则,如下:

private static final String AUTHORITY = com.lenve.cphost.mycontentprovider; static { matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI(AUTHORITY, user, 1);// 配置表 matcher.addURI(AUTHORITY, user/#, 2);// 匹配任何数字 matcher.addURI(AUTHORITY, user/*, 3);// 匹配任何文本 }我们一般习惯于在静态模块中初始化UriMatcher,我们可以向其中添加匹配规则,比如第6行,我们添加了匹配规则,如果如果Uri第三部分只用一个user,那么匹配结果为1,第7行,#表示任意数字,这句话表示如果Uri的第三部分是数字,那么匹配结果为2,第8行,*表示任意字符,user后还跟了第三个参数,那么匹配结果为3,我们以delete方法为例:

@Override public int delete(Uri uri, String selection, String[] selectionArgs) { int code = matcher.match(uri); int result = 0; switch (code) { case UriMatcher.NO_MATCH: break; case 1: // 删除所有 result = db.delete(DBHelper.USERTABLE, null, null); Log.d(qf, 删除所有数据!); break; case 2: // content://com.lenve.cphost.mycontentprovider/user/10 // 按条件删除,id result = db.delete(DBHelper.USERTABLE, _id=?, new String[] { ContentUris.parseId(uri) + }); Log.d(qf, 根据删除一条数据); break; case 3: // content://com.lenve.cphost.mycontentprovider/user/zhangsan // uri.getPathSegments()拿到一个List,里边的值分别是0-->user、1-->zhangsan result = db.delete(DBHelper.USERTABLE, USERNAME=?, new String[] { uri.getPathSegments().get(1) }); break; default: break; } return result; }

调用Uri中的matcher方法来进行匹配,系统会根据我们在静态模块中的定义来返回相应的匹配结果,根据不同的结果,执行不同的操作,那么我们有什么方法可以快速提取出Uri中的参数呢?

这里我们介绍两个方法,

1.比如我们的Uri是这样的:

content://com.lenve.cphost.mycontentprovider/user/zhangsan那么我们通过uri.getPathSegments()方法可以拿到一个List集合,该集合中放了两个字符串,第一个是user,第二个是zhangsan

2.比如我们的Uri是这样的:

content://com.lenve.cphost.mycontentprovider/user/10那么我们可以通过ContentUris.parseId(uri)方法获得10这个数字

以上两种方式基本已经可以解决我们遇到的所有问题了,

说了这么多,现在给大家看看一个完整的我的自定义ContentProvider:

public class MyContentProvider extends ContentProvider { private SQLiteOpenHelper helper; private SQLiteDatabase db; private static UriMatcher matcher; private static final String AUTHORITY = com.lenve.cphost.mycontentprovider; static { matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI(AUTHORITY, user, 1);// 配置表 matcher.addURI(AUTHORITY, user/#, 2);// 匹配任何数字 matcher.addURI(AUTHORITY, user/*, 3);// 匹配任何文本 } @Override public boolean onCreate() { helper = new DBHelper(getContext(), lenve.db, null, 1); db = helper.getWritableDatabase(); Log.d(qf, MyContentProvider--->onCreate()); return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { return null; } @Override public String getType(Uri uri) { return null; } @Override public Uri insert(Uri uri, ContentValues values) { db.insert(DBHelper.USERTABLE, null, values); return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { int code = matcher.match(uri); int result = 0; switch (code) { case UriMatcher.NO_MATCH: break; case 1: // 删除所有 result = db.delete(DBHelper.USERTABLE, null, null); Log.d(qf, 删除所有数据!); break; case 2: // content://com.lenve.cphost.mycontentprovider/user/10 // 按条件删除,id result = db.delete(DBHelper.USERTABLE, _id=?, new String[] { ContentUris.parseId(uri) + }); Log.d(qf, 根据删除一条数据); break; case 3: // content://com.lenve.cphost.mycontentprovider/user/zhangsan // uri.getPathSegments()拿到一个List,里边的值分别是0-->user、1-->zhangsan result = db.delete(DBHelper.USERTABLE, USERNAME=?, new String[] { uri.getPathSegments().get(1) }); break; default: break; } return result; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int code = matcher.match(uri); int result = 0; switch (code) { case 1: result = db.update(DBHelper.USERTABLE, values, selection, selectionArgs); break; case 2: result = db.update(DBHelper.USERTABLE, values, _id= + ContentUris.parseId(uri) + AND + selection, selectionArgs); break; // 根据手动传参id来更新 case 3: result = db.update(DBHelper.USERTABLE, values, selection, selectionArgs); break; } return result; }由于时间关系,有几个方法没有实现,不过原理都是一样的,不多说。

所有这些都做完之后,别忘了在清单文件中注册ContentProvider,如下:

这里解释一下第三个参数,设置为true表示允许其他App调用,设置为false表示不允许其他App调用。

这里说完,我们再看看怎么在cpTest这个App中操作这些数据:

核心代码如下:

public class MainActivity extends Activity { private ContentResolver cr; private ContentValues values; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cr = getContentResolver(); values = new ContentValues(); } public void onClickBtn(View v) { switch (v.getId()) { case R.id.add_btn: addData(); break; case R.id.delete_btn: deleteData(); break; case R.id.update_btn: updateData(); break; case R.id.search_btn: break; default: break; } } private void updateData() { // values.put(USERNAME, lisi); // cr.update(Uri.parse(content://com.lenve.cphost.mycontentprovider/user), // values, _id=?, // new String[] { 4 + }); values.put(USERNAME, wangwu); cr.update(Uri.parse(content://com.lenve.cphost.mycontentprovider/user/3), values, USERNAME=?, new String[] { lisi }); } private void deleteData() { // 根据id删除 // cr.delete(Uri.parse(content://com.lenve.cphost.mycontentprovider/user/1), // , new String[] {}); // 根据username删除 cr.delete(Uri.parse(content://com.lenve.cphost.mycontentprovider/user/zhangsan), , new String[] {}); } private void addData() { values.put(USERNAME, zhangsan); values.put(NICKNAME, 张三); values.put(AGE, 18); values.put(GENDER, 男); cr.insert(Uri.parse(content://com.lenve.cphost.mycontentprovider), values); }}

8.html使用自定义标签 篇八

必需设置标签的xmlns属性。例如,可以这样声明:。这是因为html文件有一个默认的“名字空间”,,

等标签就处在这个默认的“名字空间”中.很显然,这个默认的“名字空间”中并不包含我们的“自定义标签”,因此我们只能自己定义一个“名字空间”,让“自定义标签”处在这个自定义的“名字空间”中.经过我的尝试,自定义名字空间不可以使用中文。例如,这样声明:是错误的

在使用自定义标签时,应该使用这样的形式,不能写成<自定义标签>这样的形式。

也就是说,自定义标签的名称前一定要指明它所在的“名字空间”

自定义标签的样式,既可以在

注意,在 这里是文章的标题 这里是文章的正文

9.创建“自定义甘特图”视图 篇九

甘特图已成为可视化项目计划的标准方式,在20世纪早期,美国工程师Henry Gantt开发了条形图,用它显示随着时间的流逝资源的使用情况。对于许多人而言,甘特图就是项目计划的代名词。在Project中,默认视图就是“甘特图”视图。在Project中工作时,大部分时间都是使用这种视图。

“甘特图”视图由两部分组成:左边的表和右边的条形图。条形图包括一个横跨顶部的时间刻度,它表明时间单位。图中的条形是表中任务的图形化表示,表示的内容有开始时间和完成时间、工期及状态(例如,任务中的工作是否已经开始进行)。图中的其他元素如链接线,代表任务间的关系。甘特图是在项目管理业界广泛应用并为人们充分理解的项目信息的表示形式。

提示 默认情况下,在启动Project时,会显示“甘特图”视图。但是,可以更改设置,将任意视图作为启动视图。在“工具”菜单中,单击“选项”。在“选项”对话框中,单击“视图”标签。在“默认视图”框中,单击想要设置的视图。下一次启动Project及新建项目计划时,就会出现您选择的视图。

“甘特图”视图的默认格式适合在屏幕上查看、与其他程序共享以及打印。但是,可以更改甘特图中几乎所有元素的格式。在下面的练习中,将着重修改甘特条。

格式化甘特条有以下三种截然不同的方法。

n 使用“条形图样式”对话框(单击“格式”菜单中的“条形图样式”命令打开此对话框)格式化一类甘特条。在此情况下,对特定类型的甘特条(如摘要任务)所做的格式修改会应用于甘特图中所有此类型的条形图。

n 使用甘特图向导(单击“格式”菜单中的“甘特图向导”命令)格式化一类甘特条。此向导包括一系列的页面,在其中可为甘特图中最常用的甘特条选择格式选项。使用甘特图向导使您按步骤执行一些格式化操作,而这些操作在“条形图样式”对话框中也可执行。

n 直接格式化单个甘特条。此种格式修改不会影响甘特图中的其他条形图。可以双击甘特图中的某一甘特条,或单击“格式”菜单中的“条形图”命令来查看该条形图的格式选项。

在下面的练习中将创建自定义甘特图并使用甘特图向导对它应用预定义的格式,然后预览打印结果。

确保已启动Microsoft Office Project 。

重要提示 如果使用的是Project Professional,可能需要一次性的设置,使用“计算机”账户并脱机工作。这样确保使用的本章练习文件不会影响Project Server数据,详情参见1.3节。

打开DocumentsMicrosoft PressProject 2007 SBSChapter 5 Simple Formatting 文件夹下的Wingtip Toys Commercial 5a。也可以通过下述方法访问本书的练习文件:单击“开始”|“所有程序”|Microsoft Press| Project 2007 SBS,然后选择想打开的文件所属章的文件夹。

(1) 在“文件”菜单下,单击“另存为”,出现“另存为”对话框。

(2) 在“文件名”框中,输入Wingtip Toys Commercial 5,然后单击“保存”。

接下来将显示项目摘要任务来查看项目的顶层或汇总的详细信息。Project会自动产生项目摘要任务,但默认情况下是不显示的。

(3) 在“工具”菜单下,单击“选项”。

(4) 在“选项”对话中,单击“视图”标签。

(5) 在““Wingtip Toys Commercial 5.mpp”的大纲选项”下,勾选“显示项目摘要任务”复选框,然后单击“确认”。

Project在“甘特图”视图的顶部显示项目摘要任务。在项目摘要任务的“工期”域中有可能显示#号,或是部分值。如果是这样,完成步骤(6)。

(6) 双击“工期”列列标题的右边缘,扩展该列以便看到完整值。

提示 也可双击列标题的任何一处,在出现的“列定义”对话框中,单击“最佳匹配”按钮,

要快速移动垂直分隔条到表中最近列的边缘,双击分隔条。

“工期”列变宽,可以显示列中最宽的值。

图5.1 加宽列显示完整值

接下来将创建“甘特图”视图的副本以使对格式的修改不会影响原始的“甘特图”视图。

(7) 在“视图”菜单下,单击“其他视图”。

出现“其他视图”对话框,在其中,当前视图(“甘特图”视图)是选中的。

(8) 单击“复制”按钮。出现视图定义对话框,如图5.2所示。

“名称”域包含新视图的建议名称,新视图的名称将会出现在“其他视图”对话框中,选定后还会出现在“视图”菜单中。注意“名称”域中的符号&,它是表示新视图名称键盘快捷符号的代码,如果希望创建键盘快捷方式,需要包含此 符号。

(9) 在“名称”域中,输入“自定义甘特图”,然后单击“确定”。

视图定义对话框关闭。在“其他视图”对话框中会出现“自定义甘特图”视图并且被选中,如图5.3所示。

(10) 在“其他视图”对话框中,单击“应用”按钮。

(11) 在“标准”工具栏中,单击“滚动到任务”。

此时,“自定义甘特图”视图是原始“甘特图”视图的精确副本,所以两个视图看起来是相同的。注意,视图左边缘的视图标题已经更新。

接下来将使用甘特图向导在“自定义甘特图”视图的图部分中格式化甘特条和里程碑。

(12) 在“格式”菜单中,单击“甘特图向导”,出现甘特图向导的欢迎界面,如图5.4所示。

图5.4 甘特图向导的欢迎界面

(13) 单击“下一步”,出现甘特图向导的下一个界面。

(14) 单击“其他”,在“其他”选项旁边的下拉列表中,单击“标准:样式4”,如图5.5所示。

图5.5 选择其他样式

提示 如果想在向导中查看其他内置的甘特图样式,在“其他”列表框中选择相应样式,在向导窗口左边可预览该样式。确保选中“标准:样式4”。

(15) 目前只需在甘特图向导中做这一个选择,因此单击“完成”按钮。甘特图向导的结束页出现。

(16) 单击“开始设置格式”按钮,然后单击“退出向导”按钮。

甘特图向导将“标准:样式4”应用于自定义甘特图,然后向导关闭。结果如 图5.6所示。

应用“标准:样式4”

可以看到“标准:样式4”对项目计划的格式化效果。注意项目计划中的数据并没改变,只有格式发生改变。这些格式化改变只影响“自定义甘特图”视图,Project中的所有其他视图并未受影响。

接下来将格式化单个的甘特条形图。您希望使Hold auditions任务的甘特条形图更具视觉吸引力。

(17) 单击任务5的名称Hold auditions。

(18) 在“格式”菜单中,单击“条形图”。

(19) 在“条形图形状”选项卡中,在“中部”区域中,单击“颜色”框。

(20) 单击蓝色,然后单击“确定”。

Project将蓝色应用到任务5的甘特条形图。

在练习的结尾要预览“自定义甘特图”视图。屏幕上所见与打印页上所见基本相同,下面验证这种情况。

(21) 在“文件”菜单下,单击“打印预览”。

Project在“打印预览”窗口中显示“自定义甘特图”视图,如图5.8所示。在本章和第11章中,将在“打印预览”窗口中做更多操作。

重要提示 如果您使用绘图仪(一种用于画图、表和其他线形图的装置)作为默认打印机或默认打印机的页面大小不同,那么在“打印预览”窗口中所见可能会与此处 不同。

(22) 在“打印预览”工具栏中,单击“关闭”。

格式化任务5的甘特条形图

在“打印预览”窗口中显示“自定义甘特图”视图

如果愿意,可以现在打印项目,但就本章的学习目标而言,预览就已足够。在Project中打印时,“打印”对话框(可以通过单击“文件”|“打印”打开)提供许多选项。例如,可以针对时间刻度视图如“甘特图”视图选择打印特定的日期段,或者打印特定页。

更多内容进入:

10.自定义内容区编辑流程大全 篇十

1.店铺管理→自定义内容区→编辑→插入图片→a.图片地址:图片空间→复制链接→回到店铺装修→粘帖b.链接地址:售中宝贝→找到宝贝→复制链接→回到店铺装修→粘帖→确定→发布

2.代码编辑图片:图片空间→找到图片→复制代码→回到店铺装修→点工具条上的源码→粘帖→源码→双击图片→输入链接地址→售中宝贝→找到宝贝→复制链接→回到店铺装修→粘帖→确定→发布

3.插入图片空间图片→a.上传新图

11.自定义动画教案 篇十一

package com.x2l.onlineedu.mid.object;import android.annotation.SuppressLint;import android.content.Context;import android.content.res.TypedArray;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.x2l.onlineedu.mid.R;public class TopLayout extends LinearLayout { private Context mContext; private ImageView v_left; private View v_main; private ImageView v_right; private TextView tv; TopLayOutClickListener topLayOutClickListener; public TopLayout(Context context) { super(context); mContext = context; } public TopLayout(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; init(attrs); } /** * 功 能:载入在Xml中设置的内容 * 时 间:2015年6月17日 下午2:21:07 * 注 意: * * @param attrs */ private void init(AttributeSet attrs) { TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.TopLayout); int left_Src = a.getResourceId(R.styleable.TopLayout_leftImage_src, R.drawable.ic_app); int right_Src = a.getResourceId(R.styleable.TopLayout_rightImage_Visiable, R.drawable.ic_app); int left_Visiable = a.getInt(R.styleable.TopLayout_leftImage_Visiable, View.VISIBLE); int top_background = a.getResourceId(R.styleable.TopLayout_layout_background, R.drawable.top_main); String str = a.getString(R.styleable.TopLayout_text); int right_Visiable = a.getInt(R.styleable.TopLayout_rightImage_Visiable, View.VISIBLE); int text_Visiable = a.getInt(R.styleable.TopLayout_text_Visiable, View.VISIBLE); v_main = LayoutInflater.from(mContext).inflate(R.layout.toplayout, this, true); v_left = (ImageView) v_main.findViewById(R.id.top_layout_leftbtn); v_right = (ImageView) v_main.findViewById(R.id.top_layout_rightbtn); tv = (TextView) v_main.findViewById(R.id.top_layout_text); v_left.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (topLayOutClickListener != null) { topLayOutClickListener.LeftBtnClick(); } } }); v_right.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (topLayOutClickListener != null) { topLayOutClickListener.RightBtnClick(); } } }); v_main.setBackgroundResource(top_background); v_left.setImageResource(left_Src); v_left.setVisibility(left_Visiable); v_right.setImageResource(right_Src); v_right.setVisibility(right_Visiable); tv.setText(str); tv.setVisibility(text_Visiable); } @SuppressLint(“NewApi”) public TopLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContext = context; } public interface TopLayOutClickListener { void LeftBtnClick(); void RightBtnClick(); } public void setTopLayoutClickListener(TopLayOutClickListener clickListener) { this.topLayOutClickListener = clickListener; }}

自定义控件相应的View toplayout.xml

可以在XMl自定义属性中定义的项目 必须在 attr中定义

使用上自定义控件的地方 testlayout.xml

注意:在使用自定义的控件有时候会报 No resource identifier found for attribute ‘XXX’ in package 等错误

解决方法:命名空间后面的包名应该是AndroidManifest.xml文件中定义的package包名,而不是使用的这个自定义控件所处的包的包名,

通用顶部自定义控件 可在XML自定义属性

★ 菜鸟学习Dedecms自定义标签

★ DEDECMS教程:留言薄模块的使用

★ PS自定义形状工具使用教程

★ 失落-自定义成长日记

★ 创建虚拟目录的常用属性

★ 自定义滤镜和置换滤镜的原理

★ dedecms任意地址跳转漏洞预警

★ 使用帮助 范文

★ 如何自定义IE临时文件夹的储存容量

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:iwenmi@163.com

上一篇:洪江人同乡促进会章程下一篇:格林童话读书卡范文

付费复制
学术范例网10年专业运营,值得您的信赖

限时特价:7.99元/篇

原价:20元
微信支付
已付款请点这里联系客服
欢迎使用微信支付
扫一扫微信支付
微信支付:
支付成功
已获得文章复制权限
确定
常见问题