制作技巧教程版千葉_第1頁
制作技巧教程版千葉_第2頁
制作技巧教程版千葉_第3頁
制作技巧教程版千葉_第4頁
制作技巧教程版千葉_第5頁
已閱讀5頁,還剩45頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論