Android主题制作教程_第1页
Android主题制作教程_第2页
Android主题制作教程_第3页
Android主题制作教程_第4页
Android主题制作教程_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

主题教程(2.10.30)―、MIUI主题首先,我们手机的UI是由很多部分组成的,如锁屏、通知栏、桌面壁纸、图标等等。如果我们把手机比喻成一个房子,上述的部分可想象成房子的门、窗、地板、吊灯、座椅等。那我们可以认为原生的android系统就是一个毛坯房,MIUI是在这之上的一个简装,自定义主题就是你自己给房子做的装修。MIUI提供主题自定义功能,其实就相当于帮你请了一个工程队,你可以用从众多装修方案(主题包)中选择自己喜欢的效果,最后交给工程队实施。而装修方案可大可小,大至全屋翻新,小到只换一盏灯。目前MIUI会自带两个主题包,达人们也可以设计自己的主题包,大家就可以借用达人们共享出来的设计。二、准备工作1■主题测试机器工欲善其事必先利其器,做题之前首先得有一部能刷MIUI的手机作为测试机。MIUI现有支持v4的机型分成按分辨率,可分成两类480p(480*854和480*800)与720p(720*1280),分辨率对以后的主题制作有这影响,见后面详述。480p的机子有:小米手机1/1S(自带MIUI)、HTCDesireSHTCIncredibleSSamsungI9100、华为Honor、索爱LT18i、GoogleNexusS720P的机子有:小米手机2(自带MIUI)、GoogleGalaxyNexus、GalaxySIII19300、GoogleGalaxyNexus、华为AscendD1、索尼LT26i、HTCOneX、LGLU6200附上刷机教程连接/download-html注意:在针对新版主题客户端的测试方案上线之前,主题制作者只能在2.10.26开发版或之前版本进行测试2■设计界面制作主题之前可先根据官方提供的主题界面模板,对主题界面进行设计,然后再进行切图,将设计稿切片,分成各个小部分,用与主题制作。3■主题制作软件的安装官方主题工具:/thread-642823-1-1.html使用此工具需要javaM境的支持,未安装的同学请下载:/themeeditor/jre6_2.8.3_aajfe.zip解压得jre6文件夹,将其放到到MIUIThemeEditor目录下(图1所示)。

1.windows下运行,“run-windows.bat''2」inux下运行,“run-linux.sh"3.macos运行,“mand"图1三、主题制作1■主题工具的使用打开主题工具后可点击文件新建主题(图2),或选择打开主题模板

解压主题包:拖拽后缀名为mtz格式的主题文件,置于主题工具上(如图3),等待一段时间,便会有一个与mtz文件名称相同的文件夹陈升,这便是解包操作。图3打开主题以后可看到(图4)主题名称、制作者、设计者,以及主题版本等信息,此为必填项目,ui版本选择为4.0,点击下方保存主题按钮主题文件夹内就会生成description.xml文件,来记录下这些信息。

主题打包mtz:点击工具下方打包即可生成mtz格式主题文件。点击打包并导入手机可将主题打包并导入手机并应用,前提必须开启手机的USB调试,并安装手机驱动,驱动可通过豌豆荚、qq手机管家等androidpc管理软件进行安装,能连上这类管理软件即代表手机驱动安装完成。2•图片替换不同分辨率的手机,其图片素材尺寸以及素材存放的位置也有所不同。如图5所示我的兰题►icons►res我的兰题►icons►res组奴-包含到库申-共享〒刻录新建文忻drawsble-xhdpi720pdrawable-hdpi480p以桌面图标为例,480p图标文件放在drawablehdpi,720p则为drawablexhdpi,其他模块的文件位置存放位置也与之相似。桌面图标替换:打开主题工具,先在左边选择要替换的图标,然后点击图片选择对应的图标进行替换,也可使用拖拽的方式,将要替换的图标直接拖至其上方,完成替换。(见图6)回砂t询打色帧览,:b击f版假曲)iires-drM.回砂t询打色帧览,:b击f版假曲)iires-drM.fhlfi曲寸盘碎aMa-pEjid.]]i料绽应甬导入国拆刖隐支持拖放主题文件或目1我的交档宾面我的圭題・•<打邑耳导入手机垂新to载至题41幵交悴靈andra:d.hronsGir点击替换或者也接将国片拖上去模板内毓少的圏标可点山此按钮导入□是否送禅特定擢块飞(S'(ctlew.fetidapngl£fi£c^pkris&rket.pfLgcilkuio.plaiytr.activi4.besEntryActivity.pugcilopd・.a.phoiii口tlhiuishoiLEhou.pmg:cnknaipwandroidictivjtyLogoActivitypri£全山快电(tn.aceph£)IPSoffice(ra.ips.noffirepn^;)c«n.klipiy.udraid..&pp.piKE计巨器怙m.Acalcul«t«r2.jmt)吕历(e^n.抚口脸ei乩calehilajph<)♦丰目机(com.aridra-id.contrapEiglconandroid,conara.VideoCsdncir*-prig罄mmdroiMue®tiiC!tGiactiiritiss:Di41t«ctsAic;i.ivitypn耳android,cutacts&cliivitie«.I*e-lveKeyIialerpnf底系人(com.3i&d±aid..toiL^&Els.pn^.)交件帮助主題宿迷圉诵榔决|刑词通图图6图标除了直接替换对应的图片外,还可以通过几张特定的图片来控制图标风格风格(主要用于第三方图标的风格统一),icon_border.png为最上面的一层;icon_mask.png控制图标显示大小形状,黑色区域显示图标形状;icon_pattern.png为不变色背景,icon_background.png变色背景,会根据图标颜色生成各种颜色背景。如图7所示,

kon.patternicon_maskiconborder此处iconbackground图片可以知透明或臂与icon„patternt§同的一张图但不可不放。iconborder主题图片素材当中还有一种重要的图片格式,叫做9.png。这种格式的图片是安卓平台上新创的一种拉伸却不失真的图片,这种图片主要用于一些尺寸不固定的图片,或者上面的是上面的内容区与需要特殊控制的图片,比如短信气泡,输入文字框等。这种图片的文件名会是xxx.9.png这种格式,用主题工具解包以后,所生成的9.png图片其上下左右各会有1像素黑边,如图8所示1号黑色条位置控制图片横向拉伸区域,就是左图纵向绿色区域2号黑色条位置控制图片纵向拉伸区域,就是左图横向绿色区域3号黑色条位置控制输入框内文字显示的上下位置,即右图紫色区域上下边界4号黑色条位置控制输入框内文字显示的左右边距,即右图紫色区域左右边界

黑边可以在ps内直接画上,也可通过主题工具内附带的软件进行编辑(如图9)。在使用画黑边时如果失误多选了部分,可按住shift键,再点击即可擦掉,最后按ctrl+s保存。需要注意的是9.png图片必须画上黑边,不然在应用图片的时候,即使放了对应的图片手机上也不会显示。用ps画黑边的时候需要注意,必须用纯黑色,不能有色差。可替换资源路径列克(可拖锁):res■.irawable_hdpitres■.irawable_hdpiteld_activated_holo_light.9.png;,396x943•主题工具中的模块介绍主题内基本模块Com.android.contacts通讯录以及拨号Com.android.fileexplorer文件管理器Com.android.mms短信Cviders.downloads.ui下载管理Com.android.settings设置Com.android.systemui通知栏以及任务管理器Com.android.updater系统更新Com.miui.antispam防打扰Com.miui.backup备份Com.miui.home桌面Cworkassistant流量监控framework-miui-resMIUI全局framework-resAndroid原生全局以上模块为主题工具内带有图解的模块MIUI全局和Android原生全局内主要存放文件是会在各种界面都会调用到的东西,比如按钮,弹窗,进度条等等,如在当前模块没有想要修改的素材时,可以去全局找。接下来以对短信模块的修改为例子,简单的说说使用如何使用主题工具对主题进行编辑。点击模块,若当前无此模块可将手机连上电脑,通过手机导入素材。图10选择要替换的图片,右边区域会显示图片存放的路径,以及默认素材图片尺寸,图10的中的黑圈中的数字就是默认素材的尺寸。将从设计稿内提取的素材替换进去,然后使用主题工具内提供的9.png工具,画上内容区与拉伸区。替换完成后点击打包并导入手机,测试替换效果。5•简单锁屏的制作■tim起始区域■tim起始区域百变锁屏在主题包里的lockscreen/advanee目录下,manifest.xml文件是描述脚本,以上代码为简单的iphone锁屏的代码,所谓的解锁就是将解锁起始点移动到解锁区域的过程,在这个解锁过程中可以沿着运动轨迹(图中的白线path)进行,也可完全自由的运动,当解锁起始点完全包含在结束区域时解锁完成。XY坐标为图片左上角的点,因为miui支持不同分辨率,所以在写坐标时需要注意,当图片以屏幕底部对齐时,其y坐标,需要以这种形式书写:y="#screen_height89",意思其y坐标是以屏幕高度减去图片距离屏幕底部的高度。附上百变锁屏综合教程/share/link?shareid=114192&uk=10907598436.theme_values.xml文件说明主题文件内除了图片以外,还有theme_values.xml,这个主要用于控制当前模块下的文字颜色,提示文字等信息。里面的颜色代码与普通的十六进制颜色代码不同,是在还在前面增加了2位用于控制文字透明度,可在主题工具中点击切换编辑模式查看当前模块的theme_values.xml文件

设蛊(con.ULoraid.v川电IS^u-e从手机导出tw弟偉悴[卫樱摩贖式…打开焉村库所国廿组■I1M茸它(tiliatf<ryptk*4f4figcLa<k'hidcp■:■uriii100.rioiLor(Ef7c303Ci1M拉它titl<c*lw1W曲k#4ptrel宅p*-?wd1M曲eAletrvLd.fcre41arSSDEfffff1M曲(tiliatf€r7ptk*sp4r-cla<kMpncioiLornewDryjcifi1M梵它*wpry_i»TL3-iz*E£B<567・1W曲制仁町F*ja*・.号1M曲-tdlatr*£f!7flO93Cdlatf&ryus<iHEfEfEOCOLOO.其它colsirnpiDryirv*i1(Ef3333331M楚它colorU«ikttfWKMO1W其它rtd*fffSKW1M曲別砂比«£tiiaribaftehj-siding16000000並1M茎它di.ca直口■:zp56.tXK>](HdpscrttwijinrEin^sn64.(HKKHBdp7.关于壁纸和铃声替换铃声将准备好的铃声放在主题包的ringtones目录下,并按如下规则命名。来电铃声:ringtone.mp3通知铃声:notification.mp3闹钟铃声:alarm.mp3替换壁纸(包括桌面壁纸和锁屏壁纸)桌面壁纸和锁屏壁纸放在主题包的wallpaper目录下:桌面壁纸:default_wallpaper.jpg锁屏壁纸:default_lock_wallpaper.jpg领先android的锁屏技术教程我们的目标是最大化锁屏界面的自由度,让解锁界面和解锁方式可以通过主题包很方便的更换。百变锁屏时时候进军2.0新时代了,我们仍会继续发力,加入更多更酷的新功能!manifest.xml百变锁屏在主题包里的lockscreen/advanee目录下,manifest.xml文件是描述脚本frameRate:指定帧率,如果动画缓慢,可以指定小一点的值,省电。默认为30。displayDesktop属性,默认为false,透视到桌面功能,如果没有锁屏壁纸或者锁屏壁纸可以被移开或透明时可以看到桌面launcher或者是锁屏前的应用程序。可以完美实现WP7,Meego,阿里云等的解锁界面。界面元素的遮挡取决于在xml中出现的先后,最先出现的在最下层。〈Lockscreenversion="l"frameRate=""displayDesktop="boolean"〉〈Image/>〈Image/>〈Unlocker/〉〈Unlocker/〉〈Time/〉〈DateTime/〉〈Text/〉〈/Lockscreen〉壁纸元素Wallpaper元素引用系统设置的壁纸,除了不能指定图片源外其他和Image元素相同,可以有动画和其他属性控制。如果没有此元素则不显示壁纸。可以有多个。例子:<Wallpaper/>变量及变量数组<Var><VarArray>分别定义单个变量和变量数组<Varname=""expression=""type=""const=""/>name变量名expression变量对应的表达式或常量注意:如果定义字符串常量需要多一套单引号:expression="'mystring'"type=number/string定义数值变量或字符串变量默认:numberconst=true变量只会在初始化时计算一次,以后不会重新计算,可以提高效率。如果变量值会在锁屏运行期间改变,const设为false默认:false〈VarArraytype="string"〉〈Vars〉<Varname="date_formatl"index="#time/2000%5"/〉<Varname="date_format2"index="2"const="true"/></Vars>〈Items〉〈Itemexpression="ifelse(isnull(@date_format),'MMMMd日EEEE',@date_format)"/>〈Itemvalue="EEEE"/>〈/Items〉〈/VarArray〉Item数组元素定义expression元素对应的表达式value如果元素是常量,则用value指定常量值//定义了一个每隔两秒轮换一次日期显示格式的DateTime元素.//数组元素可以用来根据数字变量值显示不同的字符串〈!一ifconstistrue,thevariablewillonlyevaluateonceattheinitialtime,一〉<Varname="show_date"expression="ifelse(isnull(#show_date),l,#show_date)"type="number"const="true"/><Varname="text_size_date"expression="ifelse(isnull(#text_size_date),18,#text_size_date)type="number"const="true"/><VarArraytype="string"><Vars><Varname="date_format1"index="#time/2000%5"/><Varname="date_format2"index="2"const="true"/></Vars>〈Items〉<Itemexpression="ifelse(isnull(@date_format),'MMMMd日EEEE',@date_format)"/〉<Itemvalue="EEEE"/〉<Itemvalue="yyyy年"/〉<Itemvalue="MMMM"/〉<Itemvalue="d日"/〉〈/Items〉〈/VarArray〉//显示英文月份<VarArraytype="string"〉<Vars><Varname="month_str"index="#month"/〉</Vars>〈Items〉〈Itemvalue="January"/〉〈Itemvalue="February"/>〈Itemvalue="November"/〉〈Itemvalue="December"/〉〈/Items〉〈/VarArray〉〈Texttext="@month_str"color="#FFFFFFFF"size="20".../>变量表达式,src除外当前支持变量:变量以#开头解锁物件属性:格式:物件名.属性名#unlocker.move_xmove_x解锁时在x方向移动距离move_y解锁时在y方向移动距离move_dist解锁时移动距离state解锁状态:正常:0按下:1到达解锁位置:2全局变量:time当前时间,longtouch_x当前触摸点xtouch_y当前触摸点ybattery_level电池电量0-100sms_unread_count未读短信call_missed_count未接电话//时间日期变量time_sys变量,为系统当前时间毫秒数。ampm上下午//0am,1pmhour12小时,12小时制hour24小时,24小时制minute分钟second秒year年month月//0-11date日day_of_week星期//1-7星期日到星期六screen_width屏幕宽度screen_height屏幕高度battery_state电池状态:正常:0充电:1电量低:2已充满:3例子:alpha值的变量表达式表示该图片只有在非充电状态显示,并且随着解锁水平方向的拖动逐渐变透明至消失。〈Imagex="162"y="#screen_height-84"src="hs_path_bg.png"alpha二"(255-#unlocker.move_x/100*255)*min(1,abs(l-#battery_state))"/>表达式支持加减乘除取模括号和函数加减乘除取模:+-*/%支持函数:sin,cos,tan,asin,acos,atan,sinh,cosh,sqrt,abs,min,max不解释len(数字)给定数字位数len(1234)=4digit(数字,第几位)取给定数字的第几位digit(1234,2)=3round()四舍五入取整int()向下取整eq(x,y)//x==y?1:0ne(x,y)//x!=y?1:0ge(x,y)//x>=y?1:0gt(x,y)//x>y?1:0le(x,y)//x<=y?1:0lt(x,y)//xisnull(x)//x==null?1:0//是否表达式包含空变量,通常用于判断绑定的变量是否查到数据not(x)x>0?0:1ifelse(x,y,z)//x>0?y:zifelse(x1,y1,x2,y2,...,z)ifx1>0returny1;elseifx2>0returny2;...;elsereturnz+可以拼接字符串,一些函数也可以支持字符串,isnull可以判断字符串变量是否为空,ifelse可以选择字符串,字符串比较函数eqs(@string1,@string2)元素可见性支持表达式visibility=“表达式"v=0不可见>0可见Image,Text,Time的属性align=left,center,right坐标点水平对齐方式Image,Time属性alignV=top,center,bottom坐标点垂直对齐方式文本部件显示指定格式的文字,坐标属性支持变量color:文字颜色,#FFFFFFFFsize:文字大小format:如果需要在文字中显示变量数字,需要指定格式,用%4指定数字位置paras:如果指定了format,需要在paras里指定%d对应的变量表达式,可以有多个变量表达式用","隔开align:left,center,right,文字坐标的对齐方式Text新增自动滚动功能,如果制定了宽度和滚动速度marqueeSpeed,在文字超过宽度的时候会自动滚动显示angle:旋转角度自动滚动功能,如果制定了宽度和滚动速度marqueeSpeed,在文字超过宽度的时候会自动滚动显示文本支持多行<Textname="text1"multiLine="true"width="150".../>#text1.text_height为折行后的高度可选属性:spacingMult行距倍数默认1spacingAdd行距增加量默认0next_alarm_time下一个闹钟时间<Texttext="@next_alarm_time".../>文字和日期支持旋转<Textangle=""/>〈Textformat="下一个闹钟:[%s]电池:[%d%%]"paras="@next_alarm_time,#battery_level"/〉〈lextx=y=text=color=size=format=paras=#x,#yalign=marqueeSpeed=>〈PositionAnimation/〉〈/Text〉<Textx="240"y="130+#unlocker.move_y"category="Charging"color="#AAFFFFFF"alpha="200"size="24"format="正在充电(%d%%)"paras="#battery_level"align="center"/>文本元素支持文字宽度变量属性text_width<Textname="tt".../>#tt.text_widthtextExp属性支持字符串表达式:例子:天气信息,如果温度为空显示一非空显示数值〈Textvisibility="#hasweather"x="(#screen_width/2)+180"y="#screen_height-290"w="360"size="36"color="#ffffff"align="right"textExp="ifelse(isnull(#weather_temperature),'—',#weather_temperature)+'C'"/>时间部件src表示时间图片的前缀,如下表示使用time_0.png,time_1.png,...time_9.png,time_dot.png.坐标属性支持变量表达式<Timex="10"y="10"src="time.png"></Time>日期部件显示指定格式的日期format:支持标准日期格式,另外增加农历:NNNN<DateTimex=""y=""color=""size=""format=""><PositionAnimation/><DateTime>九月:M->9MM->097分钟:m->7mm->07mmm->007mmmm->00071970年4月6日3:23am"yyyy/MM/ddh:mmaa"->"1970/04/063:23am""M月d日h:mmaa"->"4月6日3:23am""E"->"周三""EEEE"->"星期三""纪念日:M/d"->"纪念日:4/6"24小时:"kk:mm"->"13:34"图片部件图片部件用来在锁屏界面上显示一个图片,可以指定各种属性<Imagex=""y=""w=""h=""centerX=""centerY=""angle=""src=""srcid=""alpha=""antiAlias=""/>x,y:相对于屏幕左上角的坐标w,h:宽和高centerX,centerY:旋转中心angle:旋转角度,一周360度src:图片名称srcid:图片序列后缀数字,一般用变量表示,可以根据变量显示不同的图片,如果src="pic.png"srcid="1"则最后会显示图片"pic_1.png"alpha:透明度0-255,小于等于0不显示antiAlias:true/false抗锯齿,如果为true图片在变形旋转时不会有锯齿,但是速度会慢srcExp:图片源表达式srcFormat:图片源格式srcForamtExp:图片源格式表达式srcParas:图片源参数例子:<Imagex="0"y="#screen_height-323"src="bottom_bg.png"/>元素实际位置变量,可以获得元素在动画时的实际位置:actual_xactual_y〈Imagename二"img"・・・>〈PositionAnimation>〈/PositionAnimation>〈/Image〉#img.actual_x#img.actual_y用图片显示数字的部件<ImageNumbernumber=""src="">number是要显示的数字表达式src是图片源的文件名,支持SourceAnimation如果src="number.png"则会使用number_0.pngnumber_1.png...图片文件来绘制数字。类似Time部件//srcExp:图片源表达式〈Imagex="210"y="-26"align二"center"srcExp二"'weather/weather_'+#weather_id+@icon_suffix+'・png'"/>元素动画所有元素都支持动画动画分为:图片源,位置,大小,旋转,透明度每种动画相互独立,各自循环播放,动画由若干关键帧组成,关键帧包括帧属性和时间,除图片源动画外,其它动画会根据当前时间找到相邻的两个关键帧,然后线性插值计算当前的属性。如果第一帧时间不从0开始,则默认时间为0的第一帧为图片原始属性,时间单位为毫秒。位置动画中的位置是相对于图片自身的坐标。<Image><PositionAnimation><Positionx="10"y="20"time="100"/>〈Positionx="100"y="200"time="1000"/></PositionAnimation></Image>〈RotationAnimation〉〈Rotationangle=""time=""/>〈Rotationangle=""time=""/></RotationAnimation>〈SizeAnimation〉/c・〃〃〃〃.・〃〃/\<Sizew=h=time=/><Sizew=h=time=/></SizeAnimation>〈!--0-255-->〈AlphaAnimation〉〈Alphaa=""time=""/><Alphaa=""time=""/>〈/AlphaAnimation〉例子:位置动画表示1秒从屏幕最左端到最右端,停留1秒,透明度动画表示开始透明度为175,在从最左端到最右端过程中透明度不变,到达最右端后0.5秒渐变为不透明,然后0.5秒变为透明消失。然后循环播放。<Imagex="0"y="#screen_height-177"src="charging_light.png"category二"Charging")<PositionAnimation>〈Positionx="480"y="0"time="1000"/〉〈Positionx="480"y="0"time="2000"/>〈/PositionAnimation〉〈AlphaAnimation〉〈Alphaa="175"time="0"/><Alphaa="175"time="1000"/><Alphaa="255"time="1500"/><Alphaa="0"time="2000"/></AlphaAnimation>〈/Image》注意:只有图片支持图片源动画图片源动画稍有不同,没有插值,x,y可选,表示相对图片的位置,当前的图片是在列表里的找到第一个大于当前时间的那个点指定的〈SourcesAnimation〉/o〃〃〃〃〃••!〃丄.〃V/\<Sourcex=y=src=pic1.pngtime二100/><Sourcex=""y=""src="pic2.png"time="1000"/>〈/SourcesAnimation〉图片遮罩x,y坐标,src为遮罩图片,不透明黑色部分表示不透明,其他部分为透明。align:坐标是相对于所属图片还是绝对位置,如果是相对,图片移动是遮罩会相应跟随移动。否则遮罩保持不动。〃〃〃〃〃〃丄V〃〃丄〃〃〃〃〃〃\〈Maskx=y=src=centerX=centerY二angle=align=〉〈SourcesAnimation/〉〈RotationAnimation/〉〈PositionAnimation/〉〈/Mask〉遮罩同样可以有源动画,旋转动画,和位置动画,属性支持变量表达式<Imagex="444"y="#screen_height-92"src="hs_path_light・png">〈PositionAnimation〉<Positionx="-438"y="0"time二"20007〉</PositionAnimation><Maskx="0"y="#screen_height-92"src="hs_path_mask_r.png"align二"absolute"/〉</Image>category属性界面上除解锁部件外所有元素可以指定category属性,ChargingBatteryLowBatteryFullNormal,指定了category属性的元素仅会在该状态下显示,可以用来做充电文字,动画等的显示。如<Imagex="100"y="100"src="pic.png"category="Charging"/>Slider部件<Slidername="">name:名字,用来做变量名bounceInitSpeed,bounceAccelation回弹动画初始速度和加速度(距离单位为像素,时间单位为秒),都支持表达式可以有任意个Slider部件。起始点,表示点击区域,坐标和宽高,起始点中包含的元素都会跟随当前操作的拖动移动位置。alwaysShow="true/false"丄•丄〃〃〃〃〃〃1〃〃ioi〃〃ioi〃〃\〈StartPointx=y=w=h=normalSound二pressedSound二>正常状态,可以包含若干元素〈Normalstate〉〈Image/〉〈Time/〉〈DateTime/〉〈Text/〉〈/Normalstate〉在点击区域按下,表示开始触发操作,拖动,隐藏其他状态元素,显示这些元素,〈PressedState〉〈Image/〉<Time/>〈DateTime/〉<Text/>〈/PressedState〉达到触发目标后,隐藏其他元素,显示这些元素〈ReachedState〉〈Image/〉<Time/>〈DateTime/〉<Text/></ReachedState>〈/StartPoint〉三个状态都可以不指定,可以使用变量来改变其他界面元素状态来表示触发过程。Slider目的,坐标和大小,当起始点的x,y点落入EndPoint目标区域矩形时,达到触发位置,此时松开手指即可以产生触发可以有多个触发目的〈EndPointx=y=w=h=reachedSound二〉//Slider执行的动作,可以指定不同的intent」・〃〃」〃〃」〃〃〃〃〃〃/\<Intentaction=type=category=package=class=/>〈Normalstate〉〈/Normalstate〉<!一showthetargetpositionifpressedtryingtounlock一〉〈PressedState〉<Image/>〈/PressedState〉<!一showspecifiedimagewhenreachedtarget,iftouchupthenperformunlock一〉〈ReachedState〉〈Image/〉〈/ReachedState〉//Slider路径tolerance:开始触发操作后移动时路径最大距离超过这个值则取消,回到正常状态。Path可以指定x,y坐标,默认为0,Position的坐标为相对坐标。<Pathx=""y=""tolerance="”〉<Positionx=""y=""/><Positionx=""y=""/></Path>〈/EndPoint〉例子:<Slidername="slider"〉<StartPointx="31"y="#screen_heightT17"w="90"h="90"〉〈Normalstate〉<Imagex="31"y="#screen_heightT17"src="unlock_button.png"〉〈/Image〉〈/Normalstate〉</StartPoint><EndPointx="359"y="#screen_height-117"w="90"h="90"〉<PressedState><Imagex="359"y="#screen_heightT17"src="unlock_target.png"〉〈/Image〉</PressedState><Pathx="0"y="#screen_heightT17"〉<Positionx="31"y="0"/><Positionx="359"y="0"/></Path></EndPoint></Slider>Slider的intent也可以为Trigger和Command,—个Trigger可以有多个Command。Trigger和Command请见Trigger和CommandUnlocker继承Slider,以上用法只需把tag名的Slider改为Uniocker.解锁部件回弹动画,请见/thread-290094-1-1.html锁屏音效StartPoint:normalSound,pressedSound,指定在normal和press状态播放的音效EndPoint:reachedSound,到达该endpoint后播放的音效〈Unlockername="unlocker"〉〈StartPointx="0"y="440"w="480"h="400"normalSound="sound_normal.mp3"pressedSound="sound_normal.mp3"〉<EndPointx="0"y="640"w="480"h="400"reachedSound="sound_reached.mp3"〉</Unlocker>按钮元素按钮元素可以用来接收点击,双击等事件,并可根据trigger的定义来控制界面上其他元素。按钮元素也可以将事件传递给界面上其他元素,来使其他元素响应用户在锁屏界面上的操作。<Buttonname=""x=""y=""w=""h=""listener="">所有元素增加name属性,按钮的控制对象通过name来指定。x,y,w,h指定了按钮区域。listener,指定该按钮的事件要传给哪个元素。一个Button可以有若干个trigger,trigger定义了按钮动作引发相关的操作,如控制某元素的属性<Triggeraction=""target=""property=""value=""/>action:按钮动作:down(按下),up(抬起),double(双击),long(长按,暂时未实现)target:控制目标名property:属性名,目前支持:visibility以后会增加其他属性控制。value:属性值,目前针对boolean有:true,false,toggleButton元素的xml结构:<Button>//可以指定任意个trigger,也可以不指定。(Triggers〉(Trigger/〉〈Trigger/〉</Triggers>//按钮正常状态,可以包含任意界面元素,如ImageText等,可以不指定注意:Button中Image的坐标和Button自己的坐标是独立的,都是相对于Button的父元素。〈Normal〉〈Image/〉〈Text/〉〈/Normal〉//按钮按下状态,可以包含任意界面元素,如ImageText等,也可以不指定,如果指定了//normal状态,则显示normal状态元素。〈Pressed〉〈Image/〉〈Text/〉〈/Pressed〉〈/Button〉音乐控制元素指定名称,从而使显示与否可以由另一个按钮控制,比如双击。必须包含4个Button和1个Text,并且name分别为指定的名称。可以包含其他任意界面元素如Image等。属性autoShow,true/false如果进入锁屏是在播放音乐是否自动显示MusicControlmusic_state,数字,播放状态0停止1播放visibility数字0=false1=true〈MusicControlname="music_control"x=""y=""〉//专辑封面,和普通Image一样除了图片是绑定到专辑封面的,可以指定大小,加Mask等。<Imagename="music_album_cover"/〉//歌名和歌手显示文字<Textname="music_display"/〉//上一首按钮〈Buttonname="music_prev"/〉//下一首按钮〈Buttonname="music_next"/〉//播放按钮<Buttonname="music_play"/〉//暂停按钮<Buttonname="music_pause"/〉〈/MusicControl〉例子:〈!--双击控制音乐控制显示隐臧--〉<Buttonx="178"y="529"w="126"h="126"〉〈Triggers〈<Triggeraction="double"target="music_control"property="visibility"value="toggle"/〈〈/Triggers〈〈/Button〈〈MusicControlx="0"y="300"name="music_control"visibility="false"〉<Imagename="music_album_cover"x="240"y="40"alpha="150"align="center"alignV="center"/>〈!一背景图一〉〈Imagesrc="music_bg.png"x="40"y="0"alpha="100"/><!--Text新增自动滚动功能,如果制定了宽度和滚动速度marqueeSpeed,在文字超过宽度的时候会自动滚动显示--><Textname="music_display"x="240"y="10"w="300"marqueeSpeed="30"size="24"color="#FFFFFF"alpha="150"align="center"/><Buttonname="music_prev"x="40"y="40"w="108"h="84">〈Normal〉<Imagesrc="music_previous_n.png"x="40"y="40"/>〈/Normal〉〈Pressed〉<Imagesrc="music_previous_p.png"x="40"y="40"/></Pressed>〈/Button〉〈Buttonname="music_next"x="332"y="40"w="108"h="84">〈Normal〉<Imagesrc="music_next_n.png"x="332"y="40"/>〈/Normal〉<Pressed><Imagesrc="music_next_p.png"x="332"y="40"/></Pressed>〈/Button〉〈Buttonname="music_play"x="186"y="40"w="108"h="84"〉〈Normal〉<Imagesrc="music_play_n.png"x="186"y="40"/>〈/Normal〉<Pressed><Imagesrc="music_play_p.png"x="186"y="40"/></Pressed>〈/Button〉〈Buttonname="music_pause"x="186"y="40"w="108"h="84"〉〈Normal〉<Imagesrc="music_pause_n.png"x="186"y="40"/>〈/Normal〉<Pressed><Imagesrc="music_pause_p.png"x="186"y="40"/></Pressed>〈/Button〉〈/MusicControl〉音量调节#volume_level现在音量#volume_level_old调节之前的音量取值:1-15根据二者比较判断是增大还是减小#volume_type//STREAM_VOICE_CALL=0;///*Theaudiostreamforsystemsounds*///STREAM_SYSTEM=1;///*Theaudiostreamforthephoneringandmessagealerts*///STREAM_RING=2;///*Theaudiostreamformusicplayback*///STREAM_MUSIC=3;///*Theaudiostreamforalarms*///STREAM_ALARM=4;///*Theaudiostreamfornotifications*///STREAM_NOTIFICATION=5;///*@hideTheaudiostreamforphonecallswhenconnectedonbluetooth*///STREAM_BLUETOOTH_SCO=6;///*@hideTheaudiostreamforenforcedsystemsoundsincertaincountries(e.gcamerainJapan)*///STREAM_SYSTEM_ENFORCED=7;///*@hideTheaudiostreamforDTMFtones*///STREAM_DTMF=8;///*@hideTheaudiostreamfortexttospeech(TTS)*///STREAM_TTS=9;///*@hideTheaudiostreamforFM*///STREAM_FM=10;一般锁屏下只能调music3#volume_type>=0表示正在调节音量,调节完毕后值为-1可根据这个显示或隐藏音量显示contentprividercontentprovider支持where的格式化:where=""whereFormat=""whereParas=""contentprovider支持依赖关系,即某个ContentProviderBinder查询结束后获取的变量作为下一个ContentProviderBinder查询的参数<ContentProviderBindername="name1"dependency="name2"><ContentProviderBindername="name2">name2查询结束后会触发namel的查询,namel的查询可以使用name2的变量。并且如果name2数据发生变化重新查询后,会触发name1的重新查询。contentprovider提供了查询应用程序信息的通用接口,定义了新的xml代码来查询contentprovider,并查询到的信息绑定到变量上,用来显示第三方应用程序的信息,只要第三方应用提供相应的contentprovider。比如可以显示天气信息,邮件,待办事项,便签,等等,你也可以写一个应用程序查询任何你想要的信息并通过contentprovider来提供给锁屏使用。〈VariableBinders〉〈ContentProviderBinderuri="content://sample/test"curiFormat=""uriParas=""columns="coll,col2"where=""args=""order=""countName="count_name">(Variablename="variable_namel"type="int"column="col1"row="0"/>(Variablename="variable_name2"type="string"column="col2"row="0"/>〈/ContentProviderBinder〉〈/VariableBinders〉VariableBinders:定义各种变量绑定到的源,目前仅支持contentprovider。ContentProviderBinder:定义一个contentprovider源和绑定到它上面的变量uri:contentprovideruri,指定选用哪个contentprovideruriFormat:如果uri需要添加变量,可以用格式化,需要和uriParas—起使用uriParas:同Textelement的格式columns:需要查询的列名,用逗号分隔where:查询条件,同SQLargs:"where"的参数.order:排序条件,同SQLcountName:将查询结构数量绑定到该变量名Variable:定一个绑定变量name:变量名type:contentprovider中的数据类型:string/double/float/int/longcolumn:变量绑定到的列的名称.row:变量绑定到的行数,默认为0.<!--从谷歌资讯天气查询天气信息一〉<!一一contentproviderbinderforgoogleweather一一〉〈VariableBinders〉〈ContentProviderBinderuriFormat="content://com・google.android.apps・genie・geniewidget・weather/weather/current/%d"uriParas="#time_sys"columns二"iconResId,location,temperature,lowTemperature,highTemperature,description"countName二"hasweather"〉<Variablename二"weather_id"type="int"column二"iconResld"/〉<Variablename二"weather_location"type二"string"column二"location"/〉<Variablename二"weather_temperature"type="int"column二"temperature"/〉<Variablename二"weather_lowTemperature"type="int"column二"lowTemperature"/〉<Variablename二"weather_highTemperature"type="int"column二"highTemperature"/〉<Variablename="weather_description"type="string"column="description"/>〈/ContentProviderBinder〉〈/VariableBinders〉〈!一一weatherinfodisplay一一〉〈Textvisibility="#hasweather"x="240"y=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论