领先android的锁屏技术教程-

发布时间:   来源:文档文库   
字号:
领先android的锁屏技术教程
我们的目标是最大化锁屏界面的自由度,让解锁界面和解锁方式可以通过主题包很方便的更换。 百变锁屏时时候进军2.0新时代了,我们仍会继续发力,加入更多更酷的新功能!
Manifest清单).xml 百变锁屏在主题包里的lock screen锁定屏幕)/advance推进)目录下,manifest.xml文件是描述脚本
frameRate帧速率) 指定帧率,如果动画缓慢,可以指定小一点的值,省电。默认为30
displayDesktop(桌面显示)属性,默认为false(假),透视到桌面功能,如果没有锁屏壁纸或者锁屏壁纸可以被移开或透明时可以看到桌面launcher发射器)或者是锁屏前的应用程序。可以完美实WP7Meego,阿里云等的解锁界面。
界面元素的遮挡取决于在xml中出现的先后,最先出现的在最下层。 (锁定屏 version版本) ="1" frameRate="" displayDesktop="boolean"> 图像) /> 锁屏控件

1
< Unluckier /> 锁屏控件

壁纸元素
Wallpaper元素引用系统设置的壁纸,除了不能指定图片源外其他Image元素相同,可以有动画和其他属性控制。如果没有此元素则不显示壁纸。可以有多个。 例子:

变量及变量数组
> 分别定义单个变量变量数组 name 变量名
expression 变量对应的表达式或常量 注意:如果定义字符串常量需要多一套单引号: expression="'my string'" type= number/string 定义数值变量字符串变量 默认:number
2
const = false/true=true变量只会在初始化时计算一次,以后不会重新计算,可以提高效率。如果变量值会在锁屏运行期间改变,const设为false 默认:false <Vars> 增值
index="#time/2000%5"/> ... expression="ifelse(isnull(@date_format,'MMMMd EEEE', @date_format"/> value="EEEE"/> ... Item 数组元素定义
expression 元素对应的表达式
value 如果元素是常量,则用value指定常量值
// 定义了一个每隔两秒轮换一次日期显示格式的DateTime元素. //数组元素可以用来根据数字变量值显示不同的字符串

3
< !——如果常量是真的,该变量在初始时间只能评价一次,- - >
显示日期expression="ifelse(isnull(#show_date,1,#show_date " type="number" const="true"/> expression="ifelse(isnull(#text_size_date,18,#tex t_size_date" type="number" const="true"/>
4
// 显示英文月份
...
变量表达式,src除外
当前支持变量: 变量以#开头
* 解锁物件属性: 格式:物件名.属性名
#unlocker.move_x

5
move_x 解锁时在x方向移动距离 move_y 解锁时在y方向移动距离 move_dist 解锁时移动距离
state 解锁状态: 正常:0 按下:1 到达解锁位置:2 * 全局变量: time 当前时间,long touch_x 当前触摸点 x touch_y 当前触摸点 y battery_level 电池电量 0-100 sms_unread_count 未读短信 call_missed_count 未接电话 // 时间日期变量
time_sys 变量,为系统当前时间毫秒数。 ampm 上下午 // 0 am, 1 pm hour12 小时,12小时制 hour24 小时,24小时制 minute 分钟 second year
month //0-11 date
day_of_week 星期 // 1-7 星期日到星期六

6
screen_width 屏幕宽度 screen_height 屏幕高度
battery_state 电池状态: 正常:0 充电:1 电量低:2 已充满:3 例子:alpha值的变量表达式表示该图片只有在非充电状态显示,并且随着解锁水平方向的拖动逐渐变透明至 消失。

alpha="(255-#unlocker.move_x/100*255*min(1, abs(1-#battery_state"/>
表达式
支持加减乘除取模括号和函数 加减乘除取模
: + - * / % 支持函数:sin, cos, tan, asin, acos, atan, sinh, cosh, sqrt, abs, min, max 不解释
len(数字 给定数字位数
len(1234=4 digit(数字, 第几位 取给定数字的第几位 digit(1234, 2 = 3 round( 四舍五入取整 int(向下取整 eq(x, y // x==y ? 1 : 0 ne(x, y // x!=y ? 1 : 0 ge(x, y // x>=y ? 1 : 0
7
gt(x, y // x>y ? 1 : 0 le(x, y // x<=y ? 1 : 0 lt(x, y // x isnull(x // x==null ? 1 : 0 // 是否表达式包含空变量,通常用于判断绑定的变量是否查到数据
not(x x>0 ? 0 : 1 ifelse(x, y, z // x>0 ? y : z ifelse(x1, y1, x2, y2, ... , z if x1>0 return y1; else if x2>0 return y2; ... ; else return z +可以拼接字符串 一些函数也可以支持字符串,isnull可以判断字符串变量是否为空,ifelse可以选择字符串,字符串比较函数eqs(@string1, @string2 元素可见性支持表达式
visibility=“表达式” <=0 不可见 >0可见 Image, Text, Time的属性 align= left, center, right 坐标点水平对齐方式
Image, Time 属性 alignV= top, center, bottom 坐标点垂直对齐方式

文本部件

8
显示指定格式的文字,坐标属性支持变量 color:文字颜色,#FFFFFFFF size: 文字大小 format如果需要在文字中显示变量数字,需要指定格式, %d 数字位置 paras: 如果指定了format, 需要在paras里指定%d对应的变量表达式, 可以有多个变量表达式用"," 隔开 alignleft, center, right文字坐标的对齐方式 Text新增自动滚动功能,如果制定了宽度和滚动速度marqueeSpeed,在文字超过宽度的时候会自动滚动显示 angle: 旋转角度
自动滚动功能,如果制定了宽度和滚动速度marqueeSpeed,在文字超过宽度的时候会自动滚动显示 文本支持多行 name="text1" multiLine="true" width="150" .../ > #text1.text_height 为折行后的高度 可选属性:
spacingMult 行距倍数 默认1 spacingAdd 行距增加量 默认0 next_alarm_time 下一个闹钟时间
文字和日期支持旋转

9
paras="@next_alarm_time,#battery_level"/> paras="#x,#y" align="" marqueeSpeed=""> color="#AAFFFFFF" alpha="200" size="24" format="正在充电(%d%%" paras="#battery_level" align="center"/> 文本元素支持文字宽度变量属性 text_width #tt.text_width textExp属性支持字符串表达式:
例子:天气信息,如果温度为空显示-- 非空显示数值
y="#screen_height-290" w="360" size="36" color="#ffffff" align="right" textExp="ifelse(isnull(#weather_temperature,'--',#weather_temperature + '℃'"
/>


10
时间部件
src表示时间图片的前缀,如下表示使用time_0.png, time_1.png, ... time_9.png, time_dot.png. 坐标属性支持变量表达式

日期部件
显示指定格式的日期
format: 支持标准日期格式, 另外增加农历: NNNN 九月: M -> 9 MM -> 09 7分钟: m -> 7 mm -> 07 mmm -> 007 mmmm -> 0007
11

197046
3:23am "yyyy/MM/dd h:mmaa" -> "1970/04/06 3:23am" "Md h:mmaa" -> "46 3:23am" "E" -> "周三" "EEEE" -> "星期三" "纪念日: M/d" -> "纪念日: 4/6"
24小时: "kk:mm" -> "13:34"
图片部件
图片部件用来在锁屏界面上显示一个图片,可以指定各种属性 angle="" src="" srcid="" alpha="" antiAlias=""/> x,y : 相对于屏幕左上角的坐标 w,h : 宽和高
centerX, centerY : 旋转中心 angle : 旋转角度,一周360 src : 图片名称
srcid : 图片序列后缀数字,一般用变量表示,可以根据变量显示不同的图片,如果src="pic.png" srcid="1" 则最后会显示图片

12
"pic_1.png" alpha : 透明度 0-255, 小于等于0不显示
antiAlias: true/false 抗锯齿如果为true图片在变形旋转时不会有锯齿,但是速度会慢 srcExp:图片源表达式 srcFormat:图片源格式
srcForamtExp:图片源格式表达式 srcParas:图片源参数
例子:src="bottom_bg.png"/> 元素实际位置变量,可以获得元素在动画时的实际位置:actual_x actual_y ...
#img.actual_x #img.actual_y 用图片显示数字的部件 number要显示的数字表达式 src是图片源的文件名,支持SourceAnimation
13
如果src="number.png" 则会使用 number_0.png number_1.png ... 图片文件来绘制数字。类似Time部件 //srcExp:图片源表达式
srcExp="'weather/weather_' + #weather_id + @icon_suffix + '.png'"/>
元素动画
所有元素都支持动画
动画分为:图片源位置,大小,旋转,透明度
每种动画相互独立,各自循环播放,动画由若干关键帧组成,关键帧包括帧属性和时间,除图片源动画外,其它动画会根据当前时间找到相邻的两个关键帧,然后线性插值计算当前的属性。 如果第一帧时间不从0开始,则默认时间为0的第一帧为图片原始属性,时间单位为毫秒 位置动画中的位置是相对于图片自身的坐标。 位置移动

14

大小缩放

旋转

透明度
例子:位置动画表示1秒从屏幕最左端到最右端,停留1秒,透明度动画表示开始透明度为175在从最左端到最右端过程中透明度不
15
变,到达最右端后0.5秒渐变为不透明,然后0.5秒变为透明消失。 然后循环播放。





category="Charging"> 注意:只有图片支持图片源动画
图片源动画稍有不同,没有插值,x, y 可选,表示相对图片的位置, 当前的图片是在列表里的找到第一个大于当前时间的那个点指定的

16

图片遮罩
x,y 坐标, src为遮罩图片,不透明黑色部分表示不透明,其他部分为透明。 align:坐标是相对于所属图片还是绝对位置,如果是相对,图片移动是遮罩会相应跟随移动。否则遮罩保持不动。



align=""> 遮罩同样可以有源动画,旋转动画,和位置动画,属性支持变量表达
src="hs_path_light.png"> 17
src="hs_path_mask_r.png" align="absolute"/>

category属性
界面上除解锁部件外所有元素可以指定 category属性,Charging BatteryLow BatteryFull Normal 指定了category属性的元素仅会在该状态下显示,可以用来做充电文字,动画等的显示。 category="Charging"/>
Slider部件
name: 名字,用来做变量名
bounceInitSpeed, bounceAccelation 回弹动画初始速度和加速(距离单位为像素,时间单位为秒,都支持表达式 可以有任意个Slider部件。
起始点,表示点击区域,坐标和宽高,起始点中包含的元素都会跟随当前操作的拖动移动位置。
alwaysShow="true/false"
18
pressedSound=""> 正常状态,可以包含若干元素 在点击区域按下,表示开始触发操作,拖动,隐藏其他状态元素,显示这些元素, 达到触发目标后,隐藏其他元素,显示这些元素
19
三个状态都可以不指定,可以使用变量来改变其他界面元素状态来表示触发过程。

Slider目的,坐标和大小,当起始点的x,y点落入EndPoint目标区域矩形时,达到触发位置,此时松开手指即可以产生触发 可以有多个触发目的
//Slider执行的动作,可以指定不同的intent < Intent action="" type="" category="" package="" class=""/>
20
//Slider路径 tolerance:开始触发操作后移动时路径最大距离超过这个值则取消,回到正常状态。Path可以指定 x,y坐标,默认为0Position的坐标为相对坐标。
例子:
src="unlock_button.png">
21
src="unlock_target.png">
Sliderintent也可以为TriggerCommand,一个Trigger可以有多个Command
TriggerCommand请见TriggerCommand
Unlocker继承Slider,以上用法只需把tag名的Slider改为Unlocker. 解锁部件回弹动画,请见http://www.miui.com/thread-290094-1-1.html

22
锁屏音效
StartPoint: normalSound, pressedSound ,指定在normalpress状态播放的音效
EndPoint: reachedSound, 到达该endpoint后播放的音效 normalSound="sound_normal.mp3" pressedSound="sound_normal.mp3"> reachedSound="sound_reached.mp3">
按钮元素
按钮元素可以用来接收点击,双击等事件,并可根据trigger的定义来控制界面上其他元素。按钮元素也可以将事件传递给界面上其他元素,来使其他元素响应用户在锁屏界面上的操作。







音乐控制元素
指定名称,从而使显示与否可以由另一个按钮控制,比如双击。 必须包含4Button1Text并且name分别为指定的名称。可以包含其他任意界面元素如Image等。
属性autoShow true/false 如果进入锁屏是在播放音乐是否自动显示MusicControl
25
music_state ,数字, 播放状态 0停止 1播放 visibility 数字
0=false 1=true
//专辑封面,和普通Image一样除了图片是绑定到专辑封面的,可以指定大小,加Mask等。
//歌名和歌手显示文字 //上一首按钮

27

音量调节
#volume_level 现在音量 #volume_level_old 调节之前的音量 取值: 1-15 根据二者比较判断是增大还是减小
#volume_type
// STREAM_VOICE_CALL = 0; // /* The audio stream for system sounds */ // STREAM_SYSTEM = 1; // /* The audio stream for the phone ring and message alerts */
// STREAM_RING = 2; // /* The audio stream for music playback */ // STREAM_MUSIC = 3; // /* The audio stream for alarms */ // STREAM_ALARM = 4; // /* The audio stream for notifications */ // STREAM_NOTIFICATION = 5;

29
// /* @hide The audio stream for phone calls when connected on bluetooth */
// STREAM_BLUETOOTH_SCO = 6; // /* @hide The audio stream for enforced system sounds in certain countries (e.g camera in Japan */ // STREAM_SYSTEM_ENFORCED = 7; // /* @hide The audio stream for DTMF tones */ // STREAM_DTMF = 8; // /* @hide The audio stream for text to speech (TTS */ // STREAM_TTS = 9; // /* @hide The audio stream for FM */ // STREAM_FM = 10; 一般锁屏下只能调
music 3 #volume_type>=0 表示正在调节音量,调节完毕后值为-1 可根据这个显示或隐藏音量显示

content privider content provider支持where的格式化:
where="" whereFormat="" whereParas="" content provider 支持依赖关系,即某个ContentProviderBinder查询结束后获取的变量作为下一个ContentProviderBinder查询的
30
参数
dependency="name2"> name2查询结束后会触发name1的查询,name1的查询可以使name2的变量。并且如果name2数据发生变化重新查询后,会触发name1的重新查询。

content provider提供了查询应用程序信息的通用接口,定义了新xml代码来查询content provider,并查询到的信息绑定到变量上,用来显示第三方应用程序的信息,只要第三方应用提供相应的content provider。比如可以显示天气信息,邮件,待办事项,便签,等等,你也可以写一个应用程序查询任何你想要的信息并通过content provider来提供给锁屏使用。 uriFormat="" uriParas="" columns="col1,col2" where="" args="" order="" countName="count_name"> column="col1" row="0"/>
31
column="col2" row="0"/>
VariableBinders: 定义各种变量绑定到的源,目前仅支持content provider
ContentProviderBinder: 定义一个content provider源和绑定到它上面的变量
uri: content provider uri, 指定选用哪个content provider uriFormat: 如果uri需要添加变量,可以用格式化,需要和uriParas一起使用
uriParas: Text element 的格式 columns: 需要查询的列名,用逗号分隔 where: 查询条件,同 SQL args: "where" 的参数. order: 排序条件,
SQL countName: 将查询结构数量绑定到该变量名 Variable: 定一个绑定变量 name: 变量名
type: content provider中的数据类型:
string/double/float/int/long
32
column: 变量绑定到的列的名称. row: 变量绑定到的行数,默认为0. uriFormat="content://com.google.android.apps.genie.geniewidget.weather/weather/current/%d" uriParas="#time_sys" columns="iconResId,location,temperature,lowTemperature,highTemperature,description" countName="hasweather"> column="iconResId"/> column="location"/> column="temperature"/> column="lowTemperature"/>
33
column="highTemperature"/> column="description"/>

size="24" color="#FFFFFF" alpha="200" align="center" format="%s %s %d℃"
paras="@weather_location,@weather_description,#weather_temperature" /> visibility="#hasweather*not(isnull(#weather_lowTemperature*not(isnull(#weather_highTemperature" x="240" y="85" w="360" size="22" color="#FFFFFF" alpha="200" align="center" format="%d℃ / %d℃" paras="#weather_lowTemperature,#weather_highTemperature"/>
34
visibility="#hasweather*isnull(#weather_lowTemperature*not(isnull(#weather_highTemperature" x="240" y="85" w="360" size="22" color="#FFFFFF" alpha="200" align="center" format="--℃ / %d℃" paras="#weather_highTemperature"/> visibility="#hasweather*not(isnull(#weather_lowTemperature*isnull(#weather_highTemperature" x="240" y="85" w="360" size="22" color="#FFFFFF" alpha="200" align="center" format="%d℃ / --℃" paras="#weather_lowTemperature" />


y="100" srcid="#weather_id" align="center">
35
天气id列表:
weather_chance_of_rain = 2130837536; weather_chance_snow = 2130837540; weather_chance_storm = 2130837544; weather_clear = 2130837556; weather_cloudy = 2130837560; weather_flurries = 2130837564; weather_fog = 2130837568; weather_heavy_rain = 2130837572; weather_icy_sleet = 2130837576; weather_mist = 2130837583; weather_partly_cloudy = 2130837587; weather_rain = 2130837600; weather_snow_rain = 2130837606; weather_snow = 2130837608; weather_sunny = 2130837612; weather_thunderstorm = 2130837617; weather_unknown = 2130837621; weather_windy = 2130837626; //查询MIUI便签内容,显示第一条便签内容和修改时间

36
columns="modified_date,snippet" order="modified_date DESC" countName="note_count"> column="modified_date" row="0"/> column="snippet" row="0"/> visibility="#note_count" value="#note_date1" format="yyyyMMMMdd hh:mm"/> visibility="#note_count" size="18" marqueeSpeed="60" text="@note_snippet1"/> 查询未接来电的参数
uri ="content://call_log/calls"; columns = "_id,number" where = "type=3 AND new=1";
TriggerCommand
37
target, 对象.animation 表示控制对象的动画 value play,表示播放指定对象的动画 //用按钮实现开关
//每个Button中可以有若干个Command //
38
//数据

//仅切换到开,用另一个button切换到关 //铃音/静音/震动
三种状态切换
下面和上面同样效果
仅正常和静音切换

39
仅正常和震动切换
仅切换到静音,用其他button切换到其他状态 //USB存储 toggle/on/off
//Wifi toggle/on/off //用滑动方式实现开关
bounceAcceleration="1500" alwaysShow="true" visibility="#usb_mode" >
40
状态变量,仅在添加相应command后才有效
// switch state // 0 silent, 1 vibrate, 2 normal #ring_mode
// 0 disabled, 1 enabled, 2 problem, 3 half(intermediate #wifi_state
// 0 off, 1 on, 2 half #bluetooth_state

41
// 0 off, 1 on #data_state
// 0 disconnected, 1 charge only, 2 storage, 3 intermediate #usb_mode
Triggercommand支持变量赋值
/> name:变量名,expression:赋值表达式 command支持动画播放控制


43

动态帧率(大大降低锁屏的耗电) 1. 简单用法
除了原来的frameRate属性控制普通状态下的帧率外, 还支持分别设置充电、电量低、充满电状态下的帧率,以方便的控制这些状态下的帧率,达到省电的目标。 比如普通状态下没有动画,帧率可以设为0,充电状态下有动画,帧率可以设为30,以显示平滑的动画。普通状态下就可以非常省电 例如:
frameRateCharging="30" frameRateBatteryLow="20" frameRateBatteryFull="1"
2. 高级用法 为了在xml描述语言中根据时间线指定不同帧率,新增一种element,叫做FramerateController,此元素和其他界面元素一样可以被添加到各个容器中,此元素包含一个帧率控制时间线,指定在一定的时间使用一定的帧率。 xml看起来如下: loop="true">
44
此元素会控制它所在容器下的时间线的帧率,即,所有该容器下的元素的动画都会与此元素指定的帧率变化同步。

所有变量
unlocker object arrtibutes formatobjectName.property. For example: #unlocker.move_x move_x // the offset of unlocker in x direction move_y //the offset of unlocker in y direction move_dist //unlocker moves distance state //unlocker state: normal:0,pressed:1,reached:2
bmp_width, bmp_height Image //element attributes actual_x,actual_y,actual_w,actual_h // to get the actual position and size of element in animation music_state // the state of MusicControl player state, stop:0,play:1

* globel variables

45
@next_alarm_time //string 下个闹钟时间 screen_width 屏幕宽度 screen_height 屏幕高度
raw_screen_width 未经缩放后的原始屏幕宽度 raw_screen_height
time 当前时间,long touch_x 当前触摸点 x touch_y 当前触摸点 y touch_begin_x touch_begin_y touch_begin_time intercept_sys_touch 是否截获以后的触摸事件,避免被其他View捕获,例如在自由桌面widget中可以防止在widget上进行触摸操作时桌面滚动和进入编辑模式。 frame_rate 当前绘图帧率

battery_level 电池电量 0-100 sms_unread_count 未读短信 call_missed_count 未接电话 // 时间日期变量
time_sys 变量,为系统当前时间毫秒数。 ampm 上下午
// 0 am,

46
1 pm hour12 小时,12小时制 hour24 小时,24小时制 minute 分钟 second year
month //0-11 date
day_of_week 星期 // 1-7 星期日到星期六
battery_state 电池状态: 正常:0 充电:1 电量低:2 已充满:3
#volume_type
// STREAM_VOICE_CALL = 0; // /* The audio stream for system sounds */ // STREAM_SYSTEM = 1; // /* The audio stream for the phone ring and message alerts */
// STREAM_RING = 2; // /* The audio stream for music playback */ // STREAM_MUSIC = 3; // /* The audio stream for alarms */ // STREAM_ALARM = 4;

47
// /* The audio stream for notifications */ // STREAM_NOTIFICATION = 5; // /* @hide The audio stream for phone calls when connected on bluetooth */
// STREAM_BLUETOOTH_SCO = 6; // /* @hide The audio stream for enforced system sounds in certain countries (e.g camera in Japan */ // STREAM_SYSTEM_ENFORCED = 7; // /* @hide The audio stream for DTMF tones */ // STREAM_DTMF = 8; // /* @hide The audio stream for text to speech (TTS */ // STREAM_TTS = 9; // /* @hide The audio stream for FM */ // STREAM_FM = 10;
#ring_mode 0 silent, 1 vibrate, 2 normal
0 disabled, 1 enabled, 2 problem, 3 half(intermediate #wifi_state
0 off, 1 on, 2 half

48
#bluetooth_state
0 off, 1 on #data_state
// 0 disconnected, 1 charge only, 2 storage, 3 intermediate #usb_mode

49

本文来源:https://www.2haoxitong.net/k/doc/d5c8aed569eae009591bec52.html

《领先android的锁屏技术教程-.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式