主题锁屏与插件修改之MAML教程剖析.docx
- 文档编号:4900177
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:37
- 大小:37.01KB
主题锁屏与插件修改之MAML教程剖析.docx
《主题锁屏与插件修改之MAML教程剖析.docx》由会员分享,可在线阅读,更多相关《主题锁屏与插件修改之MAML教程剖析.docx(37页珍藏版)》请在冰豆网上搜索。
主题锁屏与插件修改之MAML教程剖析
MAML教程
MORE&MAML概述-----------------
MAML在百变锁屏中的应用----------
MAML在百变壁纸及动态图标中的应用
壁纸元素------------------------
变量----------------------------
变量数组------------------------
全局变量------------------------
表达式--------------------------
文本----------------------------
时间----------------------------
日期----------------------------
图片----------------------------
数字图片------------------------
图片遮罩------------------------
元素动画------------------------
Slider--------------------------
按钮----------------------------
音乐播放器----------------------
音量调节------------------------
ContentProvider----------------
Trigger&Command---------------
动态帧率------------------------
传感器调用----------------------
-------------------------------------------------1
-------------------------------------------------2
-------------------------------------------------2
-------------------------------------------------3
-------------------------------------------------3
-------------------------------------------------4
-------------------------------------------------6
-------------------------------------------------7
-------------------------------------------------8
-------------------------------------------------9
-------------------------------------------------9
------------------------------------------------10
------------------------------------------------10
------------------------------------------------11
------------------------------------------------11
------------------------------------------------13
------------------------------------------------15
------------------------------------------------17
------------------------------------------------19
------------------------------------------------19
------------------------------------------------23
------------------------------------------------28
------------------------------------------------28
MORE&MAML概述
∙MAML引擎脚本语言
MIUIApplicationMarkupLanguageforMORE(MIUIMORE引擎应用标记语言)
∙MORE渲染引擎
MarkupOrientedRenderingEngine(基于标记语言的渲染引擎)
∙概述
最初用于百变锁屏,使用xml用特定的语法描述锁屏界面。
后来不断增强功能,逐步演化成一套接近通用的界面描述语言和图形渲染引擎,在一定需求下可用于开发风格多变的用户界面。
可方便地通过更换皮肤改变界面风格、动画甚至交互方式。
MAML语言和Android的界面描述xml类似.所不同的是Android描述的是静态界面,对界面元素的更改依赖java代码。
MAML描述的是静态界面+动态属性,UI在时间线上按一定的帧率不断刷新,UI显示根据元素属性的变量表达式的计算结果实时更新。
MAML语言和运行时引擎已经从锁屏中独立出来作为MIUI内置的通用框架,除了显示时间日期等,还支持查询标准ContentProvider来获取各种信息如天气。
显示图片文本等各种元素,各种动画,滑动点击等界面交互控件,适于实现展示信息或有简单交互操作的界面。
比如时钟、天气小部件、闹钟响铃界面。
框架支持动态帧率,不必按照固定帧率不停渲染,在没有动画和更新的时侯停止渲染,此时仅占用极少资源,对于缓慢变化的动画使用低帧率渲染,高动态的动画开始后立即调整到高帧率全速渲染。
全速渲染时全屏帧率基本可以达到60帧。
合理使用可以既炫酷又不费电。
∙MORE引擎适用哪些类型的界面开发
1.展示性的信息,如图片,文字(不适合列表信息和大段文本,不适合用户输入)
2.需要有丰富的界面动画及交互动画。
3.较简单的交互,拖拽、点击(但不限于拖拽点击,通过xml代码可以实现部分类似java编程中onTouchEvent所能做到的交互)
4.使用标准控件无法实现的信息展示方式,或者无法实现的交互方式,需要自制控件的,大部分可以通过xml代码方便地描述实现。
5.需要灵活更换皮肤风格,并且界面动画和交互动画甚至部分交互方式都可以通过皮肤更换。
无需更改应用程序。
比如一些简单的工具类应用程序、无输入的操作界面希望能更换操作模式(例如来电接听界面)和桌面小工具可以考虑使用,也可以作为一个动画框架实现类似电子贺卡的界面,可支持交互,做为应用程序中的彩蛋(比如短信中的生日彩蛋)
∙MIUI主题使用MORE的模块
百变锁屏com.android.internal.policy.impl.AwesomeLockScreen
桌面时钟com.miui.home.launcher.gadget.AwesomeClock
相框小工具com.miui.home.launcher.gadget.PhotoFrame
闹钟响铃界面com.android.deskclock.AlarmAlertFullScreen
自由桌面动态小部件com.miui.home.launcher.gadget.AwesomeGadget
百变壁纸com.miui.home.launcher.MiWallpaper(基于SurfaceView)
动态图标
天气小工具com.miui.home.launcher.gadget.Weather_2x4_custom(v4)
MAML在百变锁屏中的应用
百变锁屏在主题包里的lockscreen/advance目录下,manifest.xml文件是描述脚本
…
frameRate:
指定帧率,如果动画缓慢,可以指定小一点的值,省电。
默认为30。
displayDesktop:
默认为false,透视到桌面功能,如果没有锁屏壁纸或者锁屏壁纸可以被移开或透明时可以看到桌面launcher或者是锁屏前的应用程序。
可以完美实现WP7,Meego,阿里云等的解锁界面。
showSysWallpaper:
默认为false,是否在锁屏界面显示桌面壁纸。
开启后如果没有指定锁屏壁纸
screenWidth:
设定屏幕宽度标准。
如果指定为720,锁屏中所有元素的位置都按720p的布局编写,480p的手机会自动进行缩放。
MAML在百变壁纸及动态图标中的应用
∙百变壁纸
百变壁纸在主题包的miwallpaper目录下,描述文件也是manifest.xml。
根节点表示与百变锁屏基本一致:
…
width:
表示百变壁纸的宽度。
height:
表示高度
另外,如果要实现元素跟随手指滑动的效果,需要借助#wallpaper_offset_pixel_x,#wallpaper_offset_x
wallpaper_offset_pixel_x:
偏移的像素数(0~-1*屏宽)
wallpaper_offset_x:
偏移百分比(0~1.0)
二者关系:
#wallpaper_offset_x*屏宽=-1*#wallpaper_offset_pixel_x
滑动时:
在第一屏,wallpaper_offset_pixel_x=0,wallpaper_offset_x=0;滑到最后一屏,wallpaper_offset_pixel_x=-1*屏宽,wallpaper_offset_x=1.0
为了适配不同分辨率机型,建议使用#wallpaper_offset_x。
建议的设计方式:
壁纸切成双屏宽(屏宽指的是screenWidth)
壁纸定位:
x="-#wallpaper_offset_x*屏宽"
需要跟随滑动的元素定位:
x="-#wallpaper_offset_x*屏宽+相对壁纸的位置"
∙动态图标
动态图标在主题包icons\fancy_icons\目录下,每个动态图标是一个文件夹,文件夹的名字是对应的app包名。
例如日历的动态图标是一个叫"com.android.calendar"的文件夹,里面包含manifest.xml描述文件
…
hideApplicationMessage:
默认false,屏蔽右上角的通知标志。
useVariableUpdater:
指定需要哪些系统变量,目前包括电量和时间,而且可以指定时间的更新周期,如果时间小工具每秒更新一次,需要指定更新周期为1秒,否则默认会每分钟更新一次。
如果小工具或动态图标只显示日期,则每天更新一次,可以指定更新周期为1天。
尽量选择较长的更新周期,以节约系统资源。
目前支持的tag:
Battery,DateTime.Day,DateTime.Hour,DateTime.Minute,DateTime.Second
如果某个小工具不需要电量或时间变量,则需要使用useVariableUpdater="none",指定不做时间变量等更新。
如果某个小工具显示系统电量并且显示根据时间每小时更换背景图片:
useVariableUpdater="Battery,DateTime.Hour"
如果需要每秒进行多次刷新,可以直接使用frameRate
壁纸元素
Wallpaper元素引用系统设置的壁纸,除了不能指定图片源外其他和Image元素相同,可以有动画和其他属性控制。
如果没有此元素则不显示壁纸。
可以有多个。
例子:
变量
变量
∙name变量名
∙expression变量对应的表达式或常量注意:
如果定义字符串常量需要多一套单引号:
expression="'mystring'"
∙type=number/string定义数值变量或字符串变量默认:
number
∙const=true变量只会在初始化时计算一次,以后不会重新计算,可以提高效率。
如果变量值会在锁屏运行期间改变,const设为false默认:
false
∙threshold阈值触发,当变量值的变化超过设定的阈值时,可以触发一些命令。
例如:
上述代码表示#time3的值每变化1,就会执行
∙persist默认false,变量持久化。
指定为ture后,如果没有重新给定该变量其他的值,那么这个值会一直保存,无论解锁后重新锁定或者重新应用主题都不会还原
变量数组
∙
...
...
∙Item数组元素定义
∙expression元素对应的表达式
∙value如果元素是常量,则用value指定常量值
//定义了一个每隔两秒轮换一次日期显示格式的DateTime元素.
//数组元素可以用来根据数字变量值显示不同的字符串
--ifconstistrue,thevariablewillonlyevaluateonceattheinitialtime,-->
//显示英文月份
...
全局变量
unlocker:
∙unlocker.move_x解锁部件在x方向的偏移
∙unlocker.move_y解锁部件在y方向的偏移
∙unlocker.move_dist解锁部件移动的距离
∙unlocker.state解锁部件的状态:
0normal,1pressed,2reached
touch:
∙touch_x当前触摸点的x坐标
∙touch_y
∙touch_begin_x按下屏幕时的初始x坐标
∙touch_begin_y
∙touch_begin_time按下屏幕时的时间
time:
∙time当前时间,long
∙time_sys系统时间毫秒数
∙year年份
∙month月份(取值范围是0~11,0表示一月,1表示二月,以此类推)
∙date日期
∙day_of_week星期(1表示星期日,2表示星期一,等等)
∙hour12当前小时(12小时制)
∙hour2424小时制
∙minute分钟
∙second秒
∙ampm上下午0:
am1:
pm
∙time_format0:
12h1:
24h
农历
∙year_lunar农历年份
∙year_lunar1864用来计算天干地支
∙month_lunar农历月份从1开始计
∙month_lunar_leap0/1是否润月
∙date_lunar农历日期从1开始计
battery:
∙battery_level当前电量,1~100
∙battery_state0正常1充电2电量低3已充满
screen:
∙screen_width屏幕宽度
∙screen_height屏幕高度
∙raw_screen_width物理宽度(这个表示当前设备的屏幕分辨率,不受根节点screenWidth的影响)
∙raw_screen_height物理高度
image:
∙image.actual_x图片实际x坐标
∙image.actual_y
∙image.actual_w图片实际宽度
∙image.actual_h
∙image.bmp_width图片文件的宽度(不受裁切、缩放的影响,只根据src找到指定的图片,并检测该文件的宽度)
image.bmp_height
music:
∙music_control.music_state0暂停1播放
others:
∙sms_unread_count未读短信数
∙call_missed_count未接电话数
∙@next_alarm_time下一个闹钟时间
∙intercept_sys_touch是否截获以后的触摸事件,避免被其他View捕获,例如在自由桌面widget中可以防止在widget上进行触摸操作时桌面滚动和进入编辑模式
∙frame_rate当前屏幕帧率
∙volume_type
∙0通话音量1系统音量2电话铃声,短信铃声3音乐播放器音量4闹钟音量5通知音量6连接蓝牙时的通话音量7在某些国家强制的系统音量8DTMF音量9TTS音量10FM音量
∙ring_mode0silent,1vibrate,2normal
∙wifi_state0disabled,1enabled,2problem,3half(intermediate)
∙bluetooth_state0off,1on,2half
∙data_state0off,1on
∙usb_mode0disconnected,1chargeonly,2storage,3intermediate
表达式
支持加减乘除取模括号和函数
加减乘除取模 :
+-*/ %
支持函数:
sin,cos,tan,asin,acos,atan,sinh,cosh,sqrt,abs,min,max不解释
∙len(数字)给定数字位数len(1234)=4
∙digit(数字,第几位)取给定数字的第几位digit(1234,2)=3
∙substr(原字符串,字串开始位置,字串长度)substr('今天真热',1,2)='天真'
∙round()四舍五入取整int()向下取整
∙eq(x,y)//x==y ?
1 :
0
∙ne(x,y)//x!
=y ?
1 :
0
∙ge(x,y)//x>=y ?
1 :
0
∙gt(x,y)//x>y ?
1 :
0
∙le(x,y)//x<=y ?
1 :
0
∙lt(x,y)//xisnull(x)//x==null ?
1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 主题 插件 修改 MAML 教程 剖析