![制作技巧教程版千叶_第1页](http://file4.renrendoc.com/view10/M00/2F/0A/wKhkGWWKWyGAB4uQAAK5oHMWGTA369.jpg)
![制作技巧教程版千叶_第2页](http://file4.renrendoc.com/view10/M00/2F/0A/wKhkGWWKWyGAB4uQAAK5oHMWGTA3692.jpg)
![制作技巧教程版千叶_第3页](http://file4.renrendoc.com/view10/M00/2F/0A/wKhkGWWKWyGAB4uQAAK5oHMWGTA3693.jpg)
![制作技巧教程版千叶_第4页](http://file4.renrendoc.com/view10/M00/2F/0A/wKhkGWWKWyGAB4uQAAK5oHMWGTA3694.jpg)
![制作技巧教程版千叶_第5页](http://file4.renrendoc.com/view10/M00/2F/0A/wKhkGWWKWyGAB4uQAAK5oHMWGTA3695.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MORE&MAML概•MAML引擎脚本语MIUIApplicationMarkupLanguageforMORE(MIUIMORE&MAML概•MAML引擎脚本语MIUIApplicationMarkupLanguageforMORE(MIUIMORE引擎应用标记语言•MORE渲染引MarkupOrientedRenderingEngine(基于标记语言的渲染引擎•概最初用于百变锁屏,使用 用特定的语法描述锁屏界面。后来不断增强功能,逐步演化成一套接近通用的面描述语言和图形渲染引擎,在一定需求下可用于开发风格多变的用户界面。可方便地通过更换皮肤改变界风格、动画甚至交互方式MAML语言和Android的界面描述xml类似.所不同的是Android描述的是静态界面,对界面元素的更改依赖java代码。MML描述的是静态界面动态属性,I在时间线上按一定的帧率不断刷新,I显示根据元素属性的变量表达式的计算结果实时更新。MML语言和运行时引擎已经从锁屏中独立出来作为MIUI内置的通用框ContentProvider来获取各种信息如天气。显示图片文本等各种元件、闹钟响铃界面框架支持动态帧率,不必按照固定帧率不停渲染,在没有动画和更新的时侯停止渲染,此时仅占用极少资源对于缓慢变化的动画使用低帧率渲染,高动态的动画开始后立即调整到高帧率全速渲染。全速渲染时全屏帧基本可以达到60帧。合理使用可以既炫酷又不MORE引擎适用哪些类型的界面•1.展示性的信息,如图片,文字(不适合列表信息和大段文本,不适合用户输入5.需要灵活更换皮肤风格,并且界面动画和交互动画甚至部分交互方式都可以通过皮肤更换。需更改应用程序比如一些简单的工具类应用程序、无输入的操作界面希望能更换操作模式(例如来电接听界面)和桌面小工可以考虑使用,也可以作为一个动画框架实现类似电子贺卡的界面,可支持交互,做为应用程序中的彩蛋(如短信中的生日彩蛋•MIUI主题MORE的模百变锁桌面时钟需要有丰富的界面动画及交互动画中onTouchEvent所能做到的交互)可以通过xml代码方便地描述实现。动态图天气小工具com.miui.home.launcher.gadget.Weather_2x4_customMAML在百变锁屏中的应百动态图天气小工具com.miui.home.launcher.gadget.Weather_2x4_customMAML在百变锁屏中的应百变锁屏在主题包里的lockscreen/advance目录下,manifest.xml文件是描述脚<LockscreenframeRate=""displayDesktop=""指定帧率,如果动画缓慢,可以指定小一点的值,省电。默认为30displayDesktop:默认为false,透视到桌面功能,如果没有锁屏壁纸或者锁屏壁纸可以被移开或透明时可以到桌面launcher或者是锁屏前的应用程序。可以完美实现WP7,Meego,阿里云等的解默认为false,是否在锁屏界面显示桌面壁纸。开启后如果没有指定锁屏壁<Wallpaper/>,会将桌面壁纸作为锁屏的壁纸screenWidth:720,锁屏中所有元素的位置都按720p的布局编写,480p的MAML在百变壁纸及动态图标中的应百变百变壁纸在主题包的miwallpaper目录下,描述文件也是manifest.xml。根节点表示与百变锁屏基本一<MiWallpaperframeRate="1"width="720"height="1280" width:表示百变壁纸的宽度 height:表示高<Image<Image…相框小工闹钟响铃界面自由桌面动态小部件百变壁纸com.miui.home.launcher.MiWallpaper(基于另外,如果要实现元素跟随手指滑动的效果,需要借助••wallpaper_offset_pixel_x:偏移另外,如果要实现元素跟随手指滑动的效果,需要借助••wallpaper_offset_pixel_x:偏移的像素数(0~-1*屏宽wallpaper_offset_x:偏移百分比(0~二者关系:#wallpaper_offset_x*屏宽滑动时:在第一屏,wallpaper_offset_pixel_x=0,wallpaper_offset_x=0;滑到最后一屏wallpaper_offset_pixel_x=-1*屏宽,wallpaper_offset_x=为了适配不同分辨率机型,建议使用#wallpaper_offset_x。建议的设计方式壁纸定位:x="-#wallpaper_offset_x*屏宽"需要跟随滑动的元素定位:x="-#wallpaper_offset_x*屏宽+相对壁纸的位置•动态动态图标在主题包icons\fancy_icons\目录下,每个动态图标是一个文件夹,文件夹的名字是对应的app包名 描述文<Iconversion="1"frameRate=""width="136"height="136" false,屏蔽右上角的通知标志间小工具每秒更新一次,需要指定更新周期为1 示日期,则每天更新一次,可以指定更新周期为 天。尽量选择较长的更新周期,以节约系统资源目前支tag:Battery,DateTime.Day,如果某个小工具不需要电量或时间变量,则需要useVariableUpdater="none",指定不做时间变量如果某个小工具显示系统电量并且显示根据时间每小时更换背景图片如果需要每秒进行多次刷新,可以直接使用主题里面一些目录的/thread-969981-1-Wallpaper元素引用系统设置的壁纸,除了不能指定图片源外其他和ImageWallpaper元素引用系统设置的壁纸,除了不能指定图片源外其他和Image元素相同,可以有动画和控制。如果没有此元素则不显示壁纸。可以有多个。例子:<Var>变<Varname=""expression=""type=""const=""threshold=""persist=""name变量expression变量对应的表达式或常量如果定义字符串常量需要多一套单引号expression="'mystring'"type=number/string定义数值变量或字符串变量默认:numberconst=true变量只会在初始化时计算一次,以后不会重新计算,可以提高效率。如果变量值会在锁屏运••••间改变,const设为falseblur模糊程度,好像是越大越模糊1-阈值触发,当变量值的变化超过设定的阈值时,可以触发一些命令。例如<Varname="time3"expression="#minute%10" 上述代码表示#time3的值每变化1,就会执行<Trigger/>里面的 默认false,变量持久化。指定为true后,如果没有重新给定该变量其他的值,那么这个值会一存,无论解锁后重新锁定或者重新应用主题都不会还<VarArray>变量数<VarArray<Varname="date_format1"<Varname="date_format2"index="2"<Itemexpression="ifelse(isnull(@date_format),'MMMMd<Itemexpression="ifelse(isnull(@date_format),'MMMMdEEEE',<Item•••Item数组元素定value如果元素是常量,则用value指定常量//定义了一个每隔两秒轮换一次日期显示格式的DateTime元素//数组元素可以用来根据数字变量值显示不同的字符<!--ifconstistrue,thevariablewillonlyevaluateonceattheinitialtime,-->type="number"<Varname="text_size_date"expression="ifelse(isnull(#text_size_date),18,#text_size_date)"type="number"const="true"/><VarArray<Varname="date_format1"<Varname="date_format2"index="2"<Itemexpression="ifelse(isnull(@date_format),'MMMMdEEEE',<Item<Itemvalue="yyyy年<Item<Itemvalue="d日//显示英文<VarArray<Varname="month_str"<Item<Item<Item<Item<Texttext="@month_str"color="#FFFFFFFF"size="20"...•<Texttext="@month_str"color="#FFFFFFFF"size="20"...••••unlocker.move_x解锁部件x方向的偏移unlocker.move_y解锁部件y方向的偏移unlocker.move_dist解锁部件移动的距离unlocker.state解锁部件的状态0normal,1pressed,2••••••touch_x当前触摸点的xtouch_begin_x按下屏幕时的初始x360取滑动#toucu_xtouch_begin_time按下屏幕时的时••••••••••••time当前时间,longtime_sys系统时间毫秒数year年份month月份(取值范0~11,0表示一月,1表示二月,以此类推date日day_of_week星期(1表示星期日,2表示星期一,等等hour12当前小时(12小时制minute分钟second秒ampm上下午0:amtimeformat0:12h农•••year_lunar农历年year_lunar1864用来计算天干地month_lunar农历月份1开始••month_lunar_leap0/1是否润date_lunar农历日期1开始••battery_level当前电••month_lunar_leap0/1是否润date_lunar农历日期1开始••battery_level当前电量battery_state0正常1充电23已充••••screen_width屏幕宽screen_height屏幕高物理宽度(这个表示当前设备的屏幕分辨率,不受根节点screenWidth的影响image.actual_x图片实际x位••••• 图片文件的宽度(不受裁切、缩放的影响src找到指定的图片,并检测宽度music_control.music_state0暂停1播sms_unread_count未读短信call_missed_count未接电话@next_alarm_time下一个闹钟时••••在 是否截获以后的触摸事件,避免被其他View捕获,例如在自由桌面widget中可frame_rate当前屏幕••01系统音量2电话铃声,短信铃声3音乐播放器音量4闹钟56连接蓝通话音量7在某些国家强制的系统音量8DTMF音量9TTS音量10FM音ring_mode0silent,1vibrate,2wifi_state0disabled,1enabled,2problem,3bluetooth_state0off,1on,wifi_state0disabled,1enabled,2problem,3bluetooth_state0off,1on,2data_state0off,1usb_mode0disconnected,1chargeonly,2storage,3••••表达支持加减乘除取模括号和函加减乘除取模*支持函数:sin,cos,tan,asin,acos,atan,sinh,cosh,sqrt,abs,min,max不解随机函数rand(),范围<Varexpression="#second"<VariableCommandname="rand_num"len(数字)给定数字digit(数字,第几位)取给定数字的第几位digit(12345,2)4注意:下标从右向左,并且从1开substr(原字符串,字串开始位置,字串长度)substr('今天真热',1,2)='天真•••••••••••••••round()四舍五入取int()向下取eq(x,y)//x==y表达式成立为1,反ne(x,y)x!=y表达式成立为1,反之为ge(x,y)//x>=y表达式成立为1,反gt(x,y)//x>y表达式成立为1,反之为0le(x,y)x<=y表达式成立为1,反之为0lt(x,y)//x<y表达式成立为1,反之为0isnull(x)x==null10是否表达式包含空变量,通常用于判断绑定的变量是否查到数not(x)//x>0表达式成0,反之为ifelse(x,y,z)//x>0表达式成立则输出y,否则输出ifelse(x1,y1,x2,y2,z)//ifx1>0returny1;elseifx2>0returny2;elsereturnz//如果x1>0,否则如x2>0,y2,否则x3……,都不成立则输出+可以拼接字符串函数也可以支持字符串,isnull可以判断字符串变量是否为空,ifelse可以选择字符eqs(@string1,@string2)字符串比较函元素可见性支持表达式visibility=“表达<=0不可>0可Group,Image,Text,Time的属align=left,center,right坐标点水平alignV=top,center,bottomalign=left,center,right坐标点水平alignV=top,center,bottom坐标点垂直对齐方字符串相关<Varname="str_StartsWithexpression="strStartsWith('123456789','12判断字符串是否是某字符串开头(true)--><Varname="str_EndsWith"expression="strEndsWith('123456789','89判断字符串是否是某字符串结束(true)--><Varname="str_IndexOfexpression="strIndexOf('123as455aaas6789','as')"/><!--字符串第一次出现的位置(3)--><Varname="str_LastIndexOf"expression="strLastIndexOf('123as455aaas6789','as')字符串最后一次出现的位置(10)-->"<Varname="str_Containsexpression="strContains('123as455aaas6789','aa')字符串是否包含某字符串(true)-->""/><!--)"/><!--"""/><!--<Varname="str2"type="stringexpression="strReplace('123as455aaas6789','aa','kk')"替换字符串中的子字符串('123as455kkas6789')--><Varname="str3type="stringexpression="strTrim('123显示指定格式的文字,坐标属性支持变color颜色,#FFFFFF除了16进制表可以使用color="argb(255,200,100,0)"••••••size:文字大bold:粗体,true表示加format需要在文字中显示变量数字,需要指定格式,用%d指定数字位置,%s代表字符位paras:如果指定了format,需要在paras里指定%d对应的变量表达式,可以有多个变量表达式用","隔alignleft,center,right,文字坐标的对齐方 文字表达式,可以直接调用变量等如想要输出“现9点”,可以写成textExp="'现在时间'+#hour12+'点文字宽度,当文字超过指定宽度时会被切掉。如果指定了多行显示,则会折行显示。如果指定动,则会在指定的位置滚动显示文字滚动速度,配合上面的宽•••••••••滚动间隔。当文字显示完后再•••••••••滚动间隔。当文字显示完后再次出现的间隔,默认为四个汉multiLineture/false是否支持多行显示,默认falsespacingMult行距倍数默认1spacingAdd行距增shadowDx水平方向的阴影相对文字的偏移距shadowDy竖直方向的阴影相对文字的偏移距shadowRadius阴影的模糊半径,可以实现模糊的阴影效shadowColor阴影的颜色,支持透明<TextshadowDx="3"shadowDy="4"•某行文本的宽度,可以用来排实例用<Textname="tt"实例用//显示下一个闹钟<Texttext="@next_alarm_time"<Textformat="下一个闹钟:[%s]电池textExp属性支持字符串表达式*天气信息,如果温度为空显示--非空显示数<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)+'℃随机颜<Textx="40y="60color="argb(255,rand()*255,rand()*255,rand()*255)size="32"textExp="'随机颜色'"/><Timex="10"y="10"src="time.png"</Timesrc表示时间图片的前缀,如下表示使用time_0.png,time_1.png,...time_9.png,time_dot.png.坐标属性支变量表表示时间图片的间隙,我们可以使用这个功能来对时间图片进行排版,使用正值时图片间距变大,这表示时间图片的间隙,我们可以使用这个功能来对时间图片进行排版,使用正值时图片间距变大,这可以将图片切小,节省内存。对于有投影的图片,将 写成负值,可以使投影重叠以节省空显示指定格式的日format:支持标准日期格式,另外增加农历<DateTimex=""y=""color=""size=""•九月M->MM->•7分钟m->mm->mmm->mmmm->•197046"yyyy/MM/ddh:mmaa"->"1970/04/06"Mdh:mmaa""46•星"EEEE"->"星期三"纪念日M/d"纪念日•24小时"kk:mm"图片部件用来在锁屏界面上显示一个图片,可以指定各种属<Imagex=""y=""w=""h=""pivotX=""pivotY=""rotation=""src=""alpha=""align=""w,h宽和••••pivotX,pivotY旋转中心rotation旋转角度360••••pivotX,pivotY旋转中心rotation旋转角度360度src图片名称srcid图片序列后缀数字,一般用变量表示,可以根据变量显示不同的图片,如果src="pic.png"srcid="1"最后会•••••••••••alpha0-255,小于0不显antiAlias srcExp图片源表达srcFormat图片源格式srcForamtExp图片源格式表达式srcParas图片源参数align/alignV对齐方式,上文已经介绍<Imagename="homescreen"srcType="Screenshot"/>截取锁屏界面以下的<Commandtarget="homescreen.animation"value="play"/>命令控制重新截屏mesh:m,nm与n为常量,表示将图片分成m*n块表示图片块的顶点坐标,共(m+1)*(n+1)个顶点,顺序为从左到右,从上到当有Maskmesh不生效。mesh只支持整张图片的变形,有srcW,srcH限定图片范围时也不生效例子<Imagex="0"y="-1.5"mesh="1,1"<Imagex="0"y="#screen_height-323"<Imagename="img"...//srcExp:图片源表达<Imagex="210"y="-26"align="center"srcExp="'weather/weather_'+#weather_id+@icon_suffix+'.png'"/><Imagename="homescreen"<ImageNumbernumber=""number是要显示的数字表达src是图片源的文件如果src="number.png"则会使用number_0.pngnumber_1.png...图片文件来绘制数字。类如果src="number.png"则会使用number_0.pngnumber_1.png...图片文件来绘制数字。类似Time部选择任意图片显示/thread-2691964-1-config.xml新增ImagePicker条目,可以让用户选择手机中的某个图片,获取其地址到变 <Grouptext="自定义图片summary="请先将图片裁剪到合适大小和部位以确保显示效 <ImagePickertext="图片一summary="选择图片一 <ImagePickertext="图片二summary="选择图片二 manifest.xml中Image支持Urisrcconfig中选择的图片地址,@img1<Imagex="0"y="0"src="@img1"<Imagex="0"y="500"src="@img2"清除图<VariableCommandname="img1"expression="''"type="string"将相应变量置空即<Imagex="444"y="#screen_height-92" <Positionx="-438"y="0"<Maskx="0"y="#screen_height-92"•••x,y坐遮罩图片,不透明黑色部分表示不透明,其他部分为透align坐标是相对于所属图片还是绝对位置,如果是相对,图片移动是遮罩会相应跟随移动。否则遮罩保动遮罩同样可以有源动画,旋转动画,和位置动画,属性支持变量表达<Maskx=""y=""src=""centerX=""centerY=""angle=""Group使用layered时,请务必w,h,否则无法生效例子<Groupw="#screen_width"h="#screen_height"<Imagex="300"y="500"<Imagex="300"y="500"src="mask.png"xfermode="dst_in"src_in表示按照本标签图像作为Xfermode具体用法看MAML图片混合功<Groupw="#screen_width"h="#screen_height"<Imagex="300"y="500"<Imagex="300"y="500"src="mask.png"xfermode="dst_in"xfermodeNum为了使混合模式支持变量表达式。表达式的取值对应一种混合模式,src,dst,src_over,...xor依次取值1,2.3...11的Image,按照xfermode的取值与之混合。,且我们推荐您这么做,因为<Mask/>的绘图效率并不高,可能导致你的主题出现卡顿现象所有元素都支持动动画分为:图片源,位置,大小,旋转,透明每种动画相互独立,各自循环播放,动画由若干关键帧组成,关键帧包括帧属性和时间,除图片源动画外动画会根据当前时间找到相邻的两个关键帧,然后线性插值计算当前的属性。如果第一帧时间不从0开始则默认时间为0的第一帧为图片原始属性,时间单位为毫秒位置动画中的位置是相对于图片自身的坐 <Positionx="10"y="20" <Positionx="100"y="200"<Rotationangle=""<Rotationangle=""<Sizew=""h=""<Sizew=""h=""<!--0-255--<Alphaa=""<!--0-255--<Alphaa=""<Alphaa=""例子:位置动画表示1秒从屏幕最左端到最右端,停留1秒,透明度动画表示开始透明度为175,在从最到最右端过程中透明度不变,到达0.5秒渐变为不透0.5秒变为透明消然后循环播放loop="false"initPause="true"<Imagex="0"y="#screen_height-177" <Positionx="480"y="0" <Positionx="480"y="0" <Alphaa="175" <Alphaa="175" <Alphaa="255" <Alphaa="0"注意:只有图片支持图片源动图片源动画稍有不同,没有插值,x, 可选,表示相对图片的位置当前时间的那个点指当前的图片是在列表里的找到第<Sourcex=""y=""src="pic1.png"<Sourcex=""y=""src="pic2.png"新的动画tag,原来Animationtag比较难记,新的不管什么动画类型内部tag都可以用Item,属只有一个值时可以value属性(Rotationangle),属性多个值时用原来的属性名(比如Position的xy)兼容之前的tag语法<RotationAnimation<Itemvalue="0"time="0"easeType="ElasticEaseInOut"<Itemvalue="360"time="1000"<Itemvalue="#rl_x1"time="0"<Itemvalue="#rl_x2"time="300"<ScaleAnimation<Itemvalue="0"time="0"easeType="ElasticEaseOut"<Itemvalue="1"time="1000"其他整理的动画小代码点击跳到动画变其他整理的动画小代码点击跳到动画变Group支持旋转,缩放,3DVirtualScreen: 或scale="expression"3D旋转:<Groupname=""x=""y=""w=""h=""加坐标和宽高,可以便捷地一次性调整多个元素的位置和大小。同时Group还能添加各种动画,种类与Image一样新的版本还添加了帧率控制,如果一个组里的元素都是静止的,可以添framaRate="0",系统会根个组的帧率来自动调整刷新频率,降低内存和cpu占用。所以很推荐大家在添加Group时随手加上对categoryNormalcategory属性的元素仅会在该状态下显示,可以用来做充电文字,动<ImageNormalcategory属性的元素仅会在该状态下显示,可以用来做充电文字,动<Imagex="100y="100"src="pic.pngSlider/Unlocker<Unlockervisibility="true"name="unlocker"name:名字,用来做变量bounceInitSpeed,bounceAccelation回弹动画初始速度和加速度(距离单位为像素,时间单位为秒),都支持•••••delay:毫秒延迟解锁,可以在解锁前做一些过渡动alwaysShow="true/false"默认是false,当一个Slider可见时,其他Slider消失可以有任意个Slider部件TriggerSlider的状态切换时,支持Trigger触起始点:起始点中包含的元素都会跟随当前操作的拖动移动位置<StartPointx=""y=""w=""h=""normalSound="" //从其他状态切换到NormalState时,触发该 //从其他状态切换到PressedState时,触发该 //从其他 //从其他状态切换ReachedState时,触Trigger 三个状态都可以不指定,可以使用变量来改变其他界面元素状态来表示触发过程Slider目标点:当起始点的x,y点落入EndPoint目标区域矩形时,达到触发位置,此时松开手指即可以产生发,可以有多个触发目的<EndPointx=""y=""w=""h=""<Intentaction=""type=""category=""package=""<!--showthetargetpositionifpressedtryingtounlock--<!--showspecifiedimagewhenreachedtarget,iftouchupthenperform <!--Slidertolerance:开始触发操作后移动时路径最大距离超过这个值则取消,回到正常状态。Path可以指定x,y坐标,默认为0,Position的坐标为相对坐标。--><Pathx=""y="" <Positionx=""y="" <Positionx=""y=""例子<Slider<StartPointx="31"y="#screen_height-117"w="90" <Imagex="31"y="#screen_height-117" <EndPointx="359"y="#screen_height-117"w="90" <Imagex="359"<EndPointx="359"y="#screen_height-117"w="90" <Imagex="359"y="#screen_height-117" <Pathx="0"y="#screen_height- <Positionx="31"y="0" <Positionx="359"y="0"Sliderintent也可以为TriggerCommand,一个Trigger可以有Command。Trigger请见Trigger&•新增滑动及解锁控件的endpoint状态变<EndPointname="end1"0: 1:pressedUnlocker继承Slider,以上用法只需把tag名的Slider•••解锁部件回弹动画,请/thread-290094-1-滑块偏离路径的最大允许值,偏离不超过这个值,都认为滑块在沿着路径滑动,否则视为脱离径,滑动失败滑块回到起")"/><Varname="move_dyexpression="(#touch_y-#touch_begin_yconst="false"/>滑块<Varname="move_radius"<Unlockername="unlocker" <StartPointx="#touch_begin_x"y="#touch_begin_y"w="1" <EndPointx="ifelse(ge(#move_radius,#unlock_dist),#touch_x,-1)"y="ifelse(ge(#move_radius,#unlock_dist),#touch_y,-1)"w="1"h="1"> 百变锁屏这周的版本新增了解锁部件回弹动画的改了一下dreamlock百变锁屏这周的版本新增了解锁部件回弹动画的改了一下dreamlock的锁屏,大家体验一说明<Unlockername="unlocker"bounceInitSpeed="10"<Unlockername="unlocker"bounceInitSpeed="-初始位置时速度为零,根据匀变速运动公式可以计算出加速度的表a=-v*v/2da:加速度v:d:移动离•锁屏StartPoint:normalSound,pressedSound,指定在normalpress状态播放的EndPoint:reachedSound,到达该endpoint后播<Unlocker<StartPointx="0"y="440"w="480"h="400"<EndPointx="0"y="640"w="480"h="400"按钮元素可以用来接收点击,双击等事件,并可根据 的定义来控制界面上其他元素。按钮元素也可以事件传递给界面上其他元素,来使其他元素响应用户在锁屏界面上的操作<Buttonname=""x=""y=""w=""h=""所有元素增加name属性,按钮的控制对象通过name来指•••x,y,w,h指定了按钮区域 指定该按钮的事件要传给哪个元素alignChildren="true"button标签下的子标签(比如image)坐标以button标签位置为起点一个Button可以有若干个trigger,trigger定义了按钮动作引发相关的操作,如控制某元素的属<Triggeraction=""target=""property=""action:按钮动作down按下up抬起double双击)cancel(取消)long长按,暂时未实现•••target:控制目标property:属性名,•••target:控制目标property:属性名,目前支持:visibility以后会增加其他属性控value:属性值,目前boolean有true,false,通常用 控制的目标有三类,分别是可见性控制,播放动画,以及执行命令,简单演示 <Trigger <VariableCommandname="test1" 关于命令<Command/>在后面会有详Button元素的xml结构 <!--ImageText等,也可以不指定,如果指定了normal状态,则显示normal状态元素。--> 指定名称,从而使显示与否可以由另一个按钮控制,比如双击。必须包含指定名称,从而使显示与否可以由另一个按钮控制,比如双击。必须包含4Button1Text,并name分别为指定的名称。可以包含其他任意界面元素如Image等••••autoShowtrue/false如果在播放音乐时进入锁屏,是否自动显示MusicControlmusic_state播放状态0停止1播放更新后音乐播放支持歌名和歌手名字分开显示,分别使用和MusicControl增加了以下属性用于支持歌词显示:(如你所见,上面demo里面的歌词效果就是通过这些实现的是否开启歌词支持。因为开启歌词后会有一定性能的损失,所以不需要歌词的时候不updateLyricInterval:歌词信息的更新间隔。间隔越小,更新越及时,但带来的性能损失也越大,建议在卡拉OK歌词的时候,将间隔适当设小,其他时候为了性能考虑,将间隔适•••••••• 已播放@mc.lyric_current:正在播放的歌未播放的歌上一句下一句当前行歌词的行内播放进度,浮点数歌曲长歌曲当前播放位置,单位ms音乐播放时间<DateTimex="-505"y="1575"alignV="center"color="#ffffff"<DateTimex="430"y="1575"alignV="center"color="#ffffff"音乐控制代<MusicControlname="music_control"x=""<Image<Text<Button<Button<Button<Button例子:双击控制音乐控制显示隐<Buttonx="178"y="529"w="126" <Triggeraction="double"target="music_control" <Triggeraction="double"target="music_control"<MusicControlx="0"y="300"name="music_control"<Imagename="music_album_cover"x="240"y="40"alpha="150"alignV="center"<Imagesrc="music_bg.png"x="40"y="0"alpha="100"<!--TextmarqueeSpeed,在文字超过宽度的时候<Textname="music_display"x="240"y="10"w="300"size="24"color="#FFFFFF"alpha="150"<Buttonname="music_prev"x="40"y="40"w="108" <Imagesrc="music_previous_n.png"x="40"y="40" <Imagesrc="music_previous_p.png"x="40"y="40" <Buttonname="music_next"x="332"y="40"w="108" <Imagesrc="music_next_n.png"x="332"y="40" <Imagesrc="music_next_p.png"x="332"y="40" <Buttonname="music_play"x="186"y="40"w="108" <Imagesrc="music_play_n.png"x="186"y="40" <Imagesrc="music_play_p.png"x="186"y="40" <Buttonname="music_pause"x="186"y="40"w="108" <Imagesrc="music_pause_n.png"x="186"y="40" <Imagesrc="music_pause_p.png"x="186"y="40" ••••••••••••••volume_level现在 ••••••••••••••volume_level现在音volume_level_old调节之前的音量1-15根据二者比较判断是增大还是减通话系统电话铃声,短信铃音乐播闹钟通知连接蓝牙时的通话在某些国家强制的系统音DTMF音TTS音FM音一般锁屏下只能调3(音量播放器音量表示正在调节音量,调节完毕后值为-可根据这个显示或隐藏音量Contentcontentprovider支持where的格式where=""whereFormat=""content ContentProviderBinder查询的参name2查询结束后会name1的查询,name1的查询可以使用name2的变量。并且如果name2数据发变化重新查询后,会触发name1的重新查询contentprovider提供了查询应用程序信息的通用接口,定义了xml代码来查询contentprovider,并查provider。比可以显示天气信息,邮件,待办事项,便签,等等,你也可以写一个可以显示天气信息,邮件,待办事项,便签,等等,你也可以写一个应用程序查询任何你想要的信息并contentprovider来提供给锁屏使<ContentProviderBinderuri="content://sample/test"curiFormat=""uriParas=""columns="col1,col2"where=""args=""order="" <Variablename="variable_name1"type="int"column="col1" <Variablename="variable_name2"type="string"column="col2"•• 定义各种变量绑定到的源,目前仅支持contentprovider。ContentProviderBinder:定义一个contentprovider源和绑定到它上面的变量uri:contentprovideruri,指定选用content••••••••uriFormat:如果uri需要添加变量,可以用格式化,需要和uriParas一起uriParas:同Textelement的格式columns:需要查询的列名,用逗号分隔where:查询条件,同SQLargs:"where"的参数.order:排序条件SQL 将查询结构数量绑定到该变量Variable:定一个绑定•••••name:变量type:contentprovider中的数据类string/double/float/int/longcolumn:变量绑定到的列的名称.row:变量绑定到的行数,默认为 <Variablename="weather_id"type="int" <Variablename="weather_location"type="string" <Variablename="weather_temperature"type="int" <Textvisibility="#hasweather"x="240"y="60"w="360"size="24"color="#FFFFFF"alpha="200"align="center"format="%s %s%d℃"<Texther_highTemperature))"x="240"y="85"w="360"size="22"color="#FFFFFF"alpha="200"align="center"format="%d℃/%d℃"<TextighTemperature))"x="240"y="85"w="360"size="22"color="#FFFFFF"alpha="200"align="center"format="--℃/%d℃"<TexthighTemperature)"x="240"y="85"w="360"size="22"color="#FFFFFF"alpha="200"align="center"format="%d℃/--℃"<Imagesrc="weather.png"visibility="#hasweather"x="240" <Positionx="-10"y="0" <Positionx="10"y="0" <Positionx="0"y="0"天气id列表•••••••weather_chance_of_rain=weather_chance_snow=weather_chance_storm=weather_clear=weather_cloudy=weather_flurries=weather_fog=weather_heavy_rain=weather_heavy_rain=weather_icy_sleet=weather_mist=weather_partly_cloudy=weather_rain=weather_snow_rain=weather_snow=weather_sunny=weather_thunderstorm=weather_unknown=weather_windy=•••••••••••以上是查询谷歌天气然而我们一般都是用自带的天气应用所以一般是下面的写 <ContentProviderBinderuri="content://weather/weather"d,humidity,sunrise,sunset,weather_type,city_id"countName="hasWeather"> <Variablename="weather_wind"type="string"column="wind" <Variablename="weather_city"type="string"column="city_name" <Variablename="weather_type"type="int"column="weather_type" <Variablename="weather_location"type="string" <Variablename="weather_wind"type="string"column="wind" <Variablename="city_id"type="string"column="city_id" name="aqi"type="int"column="aqi"name="pm25"type="int"column="pm25"name="pm10"type="int"column="pm10"name="so2"type="int"column="so2"name="no2"type="int"name="aqi"type="int"column="aqi"name="pm25"type="int"column="pm25"name="pm10"type="int"column="pm10"name="so2"type="int"column="so2"name="no2"type="int"column="no2"<Varname="airqualityexpression="ifelse(ge(#aqi,0)*lt(#aqi,50),'优',ge(#aqi,150)*lt(#aqi,200),'轻度污染',ge(#aqi,200)*lt(#aqi,300),'中度污',ge(#aqi,300)*le(#aqi,500),'重污染','爆表')"type="string"至于引用,大概是这<Textx="100"y="300"color="#000000"size="30"format="%s%s%squality"/>查询MIUI便签内容,显示第一条便签内容和修改时<ContentProviderBinderuri="content://notes/note"columns="modified_date,snippet"order="modified_dateDESC" <Variablename="note_date1"type="long"column="modified_date" <Variablename="note_snippet1"type="string"column="snippet"<DateTimex="300"y="50"color="#ffffffff"<Textx="5"y="180"w="450"color="#ffffffff"size="18"marqueeSpeed="60"查询未接来电的参uricolumns=where="type=3AND通过<WebServiceBinder/>请求网络数据,参/thread-608966-1-百变锁屏支持查询<Variablename="weather_city"<Variablename="weather_city"name:名称,用来在系统中保存查询结uri:webserviceapi地params:参数,格式:"参数名1:1,参数名2:2,参数名3:updateInterval:查询间隔,单位:updateIntervalFail:查询失败后的重试时间,单name:绑定参type:string参数的xpath:将返回xml结果中xpath指定的内容绑定参数值是否在退出锁屏后保存,下次进入锁屏时读取出来,避免重复联网需要MIUIv42.6.8版接收广播消息,属于,此功能可以实现不同百变模块之间的互可以取到广播中携带的extra信息并更新到指定支持Trigger:接收到broadcast广播,可更新变量,可触发若干命<BroadcastBindername=""action=""<Variablename="variable_name1"type="int"extra="testNum"<Variablename="variable_name2"type="string"extra="testStr" <Commandtarget=""••••extrabroadcast广播extra名type例子<BroadcastBinder <Variablename="number"type="int"<BroadcastBinder <VariableCommandname="number"<BroadcastBinder <VariableCommandname="number" <Imagew="#screen_width"h="#screen_height"上面这段代码位于百变壁纸模块内,下面的代码则是在锁屏模块中通过 触发百变壁纸模块中的相应功<Buttonx="0"y="0"w="#screen_width" <Trigger <Buttonx="0"y="640"w="#screen_width" <Trigger maml模块之间传递数据(较实用的功能)/thread-2750692-1-maml模块之间传递这个功能较实用,可以在maml模块间进行数据传递,例如可以在没有自定义功能的maml模块(如自桌面、百变壁纸、图标)同样实现自定义。下面的例子是在锁屏自定义百变壁纸的图片、文字,这样可以做配套的锁屏壁纸、桌面壁纸这个还可以结合v6最新自定义图片功能使用,可以实现其他maml模块自定义图片注意:设置后需要锁屏再解锁才能生效,另外不能混搭其他锁<?xmlversion='1.0'encoding='utf-<Grouptext="设置桌面壁纸<NumberChoicetext="选择桌面壁纸id="ch_wall<Itemvalue="0text="默认壁纸<Itemvalue="1text=<Itemvalue="1text="1<Itemvalue="2text="2<Itemvalue="3text="3 text="设置相册图片(图片过大会卡顿或不显示<ImagePickertext="1summary=id="imgtx01<ImagePickertext="2summary=id="imgtx02<?xmlversion="1.0"encoding="utf-<Lockscreenversion="1"frameRate="30" <Trigger <Extraname="extra_ch_wall"type="int"expression="#ch_wall" <Extraname="extra_word1"type="string"expression="@word1" <Extraname="extra_word2"type="string"expression="@word2" <Extraname="extra_imgtx01"type="string" <Extraname="extra_imgtx02"type="string" <Wallpaperw="#screen_width"h="#screen_height"<Buttonw="#screen_width" <Trigger <Extraname="extra_ch_wall"type="int" <Extraname="extra_word1"type="string" <Extraname="extra_word2"type="string" <Extraname="extra_imgtx01" <Extra <Extraname="extra_imgtx01" <Extraname="extra_imgtx02" <ExternCommandcommand="unlock" 在需要接收信息的模块中进行数据绑定(以百变壁纸为例<?xmlversion="1.0"encoding="utf-<MiWallpaperversion="1"frameRate="1"width="1080" <Variablename="ch_wall"type="int"extra="extra_ch_wall" <Variablename="word1"type="string"extra="extra_word1" <Variablename="word2"type="string"extra="extra_word2" <Variablename="imgtx01"type="string"extra="extra_imgtx01" <Variablename="imgtx02"type="string"extra="extra_imgtx02"<Imagew="#screen_width"h="#screen_height"src="w.png"srcid="#ch_wall"<Imagex="100"y="100"w="200"h="200"src="@imgtx01"<Imagex="400"y="100"w="200"h="200"src="@imgtx02"<Textx="200"y="200"color="#ffffff"size="60"textExp="@word1"<Textx="200"y="300"color="#ffffff"size="60"textExp="@word2"Trigger&•基础命令,可以通过对象名和对象的属性来控制界面里的其他元素。通常控制的是元素的可见性(visibility)动画播放(animation)<Commandtarget="iamge1.visibility"value="false"condition=""<Commandtarget="iamge1.animation"<Commandtarget="iamge1.visibility"value="false"condition=""<Commandtarget="iamge1.animation"value="play"condition=""iamge1是被控制对象的名字,“.”后面跟的是属性(目前支持visibility和animation)控制可见性的时候,value里面写true或者false,控制动画的时候,value写play(目前不支持让动画暂condition是条件判断,支持表达式。当condition里的条件判断为真时,执行命令;为假时,不执是延迟,以毫秒记。读取该命令后延迟一段时间再执delayCondition是延时判断,在delay的时间之后再进行判断例子<Buttonx="0"y="0"h="100"w="100" <Trigger //延时6000ms后,如果second<40,执 // •变量命令,用来控制变量(Var)的值。包括name和expression两个特殊属性,condition、delaydelayCondition的用Command一//将屏幕的宽度值赋值 w,还有高,一半的宽,一半的高<Varname="w"expression="#screen_width"<Varname="h"expression="#screen_height"<Varname="sw"expression="#screen_width/2"<Varname="sh"expression="#screen_height/2"•声音命令,可以用来播放音频文<SoundCommandsound=""volume=""loop=""keepCur=""1.sound:声音文件volume:声音大小,0~1的一个浮loop:是否循环播放,true/falsevolume:声音大小,0~1的一个浮loop:是否循环播放,true/false,默认是播放此音频时,是否保持当前正在播放的声音,true/false,默认注意:声音文件的大小要求不超过500kB,时长不超过10秒(10秒之后的声音播放不出来)例子//循环播放reached.mp3,同时不停掉正在播放的其他声<SoundCommandsound="reached.mp3"volume="1"loop="true"keepCur="true"•通用命令,用来向外部程序发送目前可以使用的一种命令是解锁命令(仅在锁屏中有效<ExternCommand用这个命令可以实现解锁操作,无需使用•与 相对,是用来接收外部命令的命令,典型的用法:在锁屏中,通常用来接收开屏/关屏令,从而执行一些命令;在桌面插件中,用来检测切屏从而执行命//resume表示开屏时执行的命令,pause表示关屏时执行的<Trigger <Trigger 桌面插件切屏时使用的示<Trigger <Commandtarget="root.animation"<Trigger <Commandtarget="root.animation"用按钮实现开<Buttonx="10"y="10"w="100" <Trigger <Commandtarget="Wifi" <Trigger <Commandtarget="Wifi" <Imagex="10"y="10" <Imagex="10"y="10"蓝牙value="on"<Commandtarget="Bluetooth"••数<Commandtarget="Data"<Commandtarget="Data"<Commandtarget="Data"•铃音/静音/震<!--value="normal,silent,vibrate"value="silent"value="normal" 以快速切换到需要的状态-->三种状态切<Commandtarget="RingMode"下面和上面同样效<Commandtarget="RingMode"仅正常和静<Commandtarget="RingMode"仅正常和震<Commandtarget="RingMode"仅切换到静音,用其他button切换到其他状<Commandtarget="RingMode"•USB<Commandtarget="UsbStorage"<Commandtarget="UsbStorage"<Commandtarget="UsbStorage"Wifi<Commandtarget="Wifi"•<Commandtarget="Wifi"•用滑动方式实现开<Slidername="switch_usb_mode"<StartPointx="0"y="0"w="100" <EndPointx="340"y="0"w="100" <Commandtarget="UsbStorage" <Path <Positionx="0"y="0" <Positionx="340"y="0" •••••••状态变量,仅在添加相应command后才有#ring_mode:0silent,1vibrate,2#wifi_state:0disabled,1enabled,2problem,3#bluetooth_state:0off,1on,2#data_state:0off,1#usb_mode:0disconnected,1chargeonly,2storage,3intermediateTrigger的Command支持变量赋值<VariableCommandname="test"expression="#test+1"name:变量名,expression:赋值表TriggerCommand支持动画播放<Buttonx="0"y="#screenview_y"w="#screen_width"<Trigger <VariableCommandname="ani_begin_x_add" <VariableCommandname="ani_begin_x_dec" <VariableCommandname="ani_begin_x"i_begin_x_add),#gesture_offset)"/> <VariableCommandname="touch_x" <Var<AniFramevalue="#ani_begin_x"<AniFrame<Var<AniFramevalue="#ani_begin_x"<AniFramevalue="0"<AniFramevalue="0"•LoopCommand(循环计算<LoopCommandcount="15"indexName="line" <VariableCommandname="one"expression="(ge(int(#a_num/15)-(#line+1),0))*(#line+1)"condition="eq(#fx_y,-1)"/>•简单除了原来的frameRate属性控制普通状态下的帧率外,还支持分别设置充电、电量低、充满电状态下的帧率以方便的控制这些状态下的帧率,达到省电的目标。比如普通状态下没有动画,帧率可以设为0,充电状态有动画,帧率可以设30,以显示平滑的动画,这样普通状态下就可以非例如•高级为了在xml描述语言中根据时间线指定不同帧率,新增一种element,叫做FramerateController,此元素和他界面元素一样可以被添加到各个容器中,此元素包含一个帧率控制时间线,指定在一定的时间使用一定的率<ControlPointtime="0"<ControlPointtime="1000"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业联盟运营管理协议
- 2025年药物载体材料项目提案报告范文
- 2025年高阻隔性封装材料项目提案报告
- 2025年生鲜电商项目规划申请报告模板
- 2025年停车服务授权协议范本
- 2025年合作招商协议范例
- 2025年投资策划合作协议书样本
- 2025年医疗美容服务合同范本
- 2025年体育馆施工协作协议
- 2025年住宅区绿化工程合同协议书
- 中建抹灰工程专项施工方案
- 地方融资平台债务和政府中长期支出事项监测平台操作手册-单位
- 放射科护理常规
- 洗刷书包(课件)三年级上册劳动
- 儒释道文化秒解
- 新时代中小学教师职业行为十项准则
- 人教版八年级上册英语1-4单元测试卷(含答案)
- 初中数学教学经验分享
- 2024年银行考试-兴业银行考试近5年真题附答案
- 高考数学导数知识题型全归纳专题11导数压轴题之隐零点问题(原卷版+解析)
- 2024年公开招聘人员报名资格审查表
评论
0/150
提交评论