Posted on 2009-12-19 10:32
~William~ 閱讀(474)
評論(0) 編輯 收藏 引用 所屬分類:
MTK_MMI
待機界面如何高仿NOKIA N73
如何仿N73的經典界面
1.1 狀態欄
狀態欄包含電池電量指示,信號指示,日期時間顯示,運營商名字和各個狀態圖標顯示。
電池電量顯示:
圖標ID為STATUS_ICON_BATTERY_STRENGTH
位于MainLCD\IdleScreen\Statusicons\battery 注意的是圖標保證5幀。關于電量顯示的控制位于
文件PoweronCharger.c
函數BatteryStatusIndication 根據當前的電量值設置顯示的幀數。
該圖標在狀態欄的坐標
Wgui_status_icons.c---函數arrange_status_icons()
MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].y = 0;
MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].x=220;
信號指示圖標:
圖標ID 為 STATUS_ICON_SIGNAL_STRENGTH
位于MainLCD\IdleScreen\Statusicons\signal
文件 NetWorkFunctions.c
函數ChangeStatusIconLevel根據當前的信號值設置顯示的圖片幀數。
該圖標在待機界面的坐標:
文件Wgui_status_icons.c---函數arrange_status_icons()
MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].y = 0;
MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].x=3;
時間和日期:
文件:Wgui_datetime.c
函數:show_main_LCD_date_time.設置日期,星期,時間的顯示坐標。
注意的是:在函數hide_main_LCD_date_time中需要根據前面各個對象的坐標重新設置刷新區域的坐標。并且修改Wgui_categories_idlescreen.c下面的三個函數的注冊函數(之前屏蔽的)
set_main_LCD_dt_date_hide_function(cat33_hide_date_display);
set_main_LCD_dt_time_hide_function(cat33_hide_time_display);
set_main_LCD_day_hide_function(cat33_hide_day_string_display);
為了正確的顯示時間格式(用戶選擇12小時制,會增加AM/PM兩個字母),在函數show_main_LCD_date_time. 時間顯示的clip的地方增加格式判斷 PhnsetGetTimeFormat()。根據所返回的時間格式,設定clip區域。
網絡運營商
文件:Wgui_categories_idlescreen.c
函數idle_screen_show_network_details() 調整網絡運營商的名字坐標
狀態圖標
狀態圖標包括消息接受提示,情景模式,外部電池等。圖標的排列位于:
文件:Wgui_status_icons.c
函數:arrange_status_icons()
位于代碼段:
x-=MMI_status_icons[k].width+STATUS_ICON_X_GAP;
實現圖標自右向左的排列。每當有新的狀態產生,圖標就向左移動排列。
1.2 快捷鍵
設置待機界面上各個快捷方式的坐標以及響應函數
文件Wgui_categories_idlescreen.c
函數setup_touch_idle_screen_shortcut。通過該函數設置各個快捷鍵圖標的坐標以及各自的響應函數。
文件 Shortcuts.c
修改如下函數:
ShctExecuteUpKey 功能修改為按鍵上移,高亮快捷鍵第一個圖標或者動態列表項
ShctExecuteDownKey功能修改為按鍵下移,高亮快捷鍵第一個圖標或者動態列表項
ShctExecuteLeftKey功能修改為按鍵左移,高亮左邊模塊,如果已經是第一個,則高亮最后一個
ShctExecuteRightKey功能修改為按鍵右移,高亮右邊模塊,如果已經是最后個,則高亮第一個
函數ShctExecuteOKKey 根據高亮的快捷鍵,進入對應的模塊。
文件MMI_features_GuiPLUTO.h
MMI_features_GUI.h
可以打開或關閉是否顯示shortcut的宏
__MMI_TOUCH_IDLESCREEN_SHORTCUTS__。
為了同時顯示快捷鍵和屏幕下方的左右按鍵。需要在函數ShowCategory33Screen中 屏蔽dm_data.s32flags |= DM_NO_SOFTKEY;
1.3 日歷項以及音樂播放提示
為了實現日歷項和音樂播放曲目的正確顯示,需要在待機界面增加動態列表
文件Wgui_categories_idlescreen.c
函數ShowCategory33Screen()
添加動態列表:
create_fixed_icontext_menuitems();
MMI_current_menu_type=LIST_MENU;
associate_fixed_icontext_list();
設置列表中各個項的標題和圖標:
init_dynamic_item_buffer(ItemsOfCat33,Cat33GetItemCallback,NULL,UI_dummy_function);
ItemsOfCat33:動態列表中項的個數。由當前系統運行的程序決定。
Cat33GetItemCallback:該回調函數注冊各個項的標題和圖標。
在上述函數中,首先對日歷項的存儲區進行判斷是否有內容,如果有內容,繼續判斷該日歷項的日期是否在當日,如果是,將該字符串顯示在項中。如果今日有多個項,則顯示在日歷項序列中最早的一個。如果日歷項的日期不是今日,則顯示“今天無日歷項”。
文件Todolist.c
函數:TDLDeleteAllTask ()
該函數的作用是刪除全部的備忘錄日歷項。因此,需要清空記錄緩沖區的記錄,防止在待機界面的日歷項仍然顯示。
memset(&g_tdl_cntx.NoteBuff,0,MAX_TODO_LIST_NOTE);
2 綜合
2.1修改每個新版本的默認日期:
文件:Custom_hw_default.c
數字代表基準年份的偏移。8代表2008。月份和天同理
const kal_uint8 DEFAULT_HARDWARE_YEAR = 8;
const kal_uint8 DEFAULT_HARDWARE_MON = 1;
const kal_uint8 DEFAULT_HARDWARE_DAY = 1;
2.2 通話
文件:CallManagementIncoming.c
當有外部來電的時候,進入函數
EntryScrIncomingCallEvent
文件:Wgui_categories_CM.c
函數 ShowMOMTCallScreen 很多通話事件的屏幕都需要進入該函數。可以通過該函數,查找到各個通話事件的流程。可以對已有的屏幕做界面修改。
3.3 撥號盤
文件:IdleApp.c
函數:IdleDisableLongPress
由于長按鍵之后,需要重新注冊和清楚一些按鍵。而原函數為了達到這一效果,又重新調用了函數IdleScreenDigitHandler,雖然達到了目的,但是會造成第一次按鍵反應慢,因此,在IdleDisableLongPress函數內部禁止調用前一個函數,將函數中注冊和清除的按鍵寫在IdleDisableLongPress中。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/chenzhp/archive/2009/03/14/3990510.aspx