Android 4.2 關於GlowPadView的說明

原文作者是大牛:http://blog.csdn.net/yihongyuelan/article/details/14000363 

 對於手機OEM/ODM廠商來講,客製化是必不可少的,國際廠商比如三喪,LG等等,都會對原生Android進行定製。我們買到的手機,系統都是經過定製的,這跟Google Android AOSP有很大的區別,這些區別就是廠商們想搞的差異化。以下內容爲GlowPadView客製化的一些筆記,怕以後忘了再去查。

       轉載請務必註明出處:http://blog.csdn.net/yihongyuelan

       GlowPadView就是用來實現滑動接聽的控件,該控件隸屬InCallScreen界面,也就是我們撥打或接聽電話的那個界面,在之前的文章裏面也有提到關於InCallScreen界面UI的詳細分析,有興趣的童鞋可以自取搜來看一下。

       最近需要做關於滑動接聽的一些定製,我們知道,Android原生就支持來電滑動接聽/拒接/短信回覆三種方式,實現該效果的控件在Android 4.2中叫GlowPadView.java,之前的版本叫做MultiWaveView.java。在Android 4.2上,Google對這一塊又做了一些改動,比如移除了在4.0上的水波紋動畫,滑動時不再顯示圓圈,取而代之的是小白點,帶面裏面叫PointCloud。之前在github上有看到一個開源項目,就是講4.2上的這種動畫效果提取出來,這對於像將該效果移植到4.2以前的設備上還是很有幫助的。

代碼位置:SourceCode/packages/app/Phone

滑動接聽控件佈局如下所示:

[html] view plaincopy
  1. <com.android.internal.widget.multiwaveview.GlowPadView  
  2.     android:id="@+id/incomingCallWidget"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="wrap_content"  
  5.     android:layout_gravity="center|bottom"  
  6.     android:layout_marginTop="20dip"  
  7.     android:layout_marginBottom="-110dip"  
  8.     android:background="@android:color/black"  
  9.     android:visibility="gone"  
  10.     android:gravity="top"  
  11.   
  12.     prvandroid:targetDrawables="@array/incoming_call_widget_3way_targets"  
  13.     prvandroid:targetDescriptions="@array/incoming_call_widget_3way_target_descriptions"  
  14.     prvandroid:directionDescriptions="@array/incoming_call_widget_3way_direction_descriptions"  
  15.     prvandroid:handleDrawable="@drawable/ic_in_call_touch_handle"  
  16.     prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"  
  17.     prvandroid:outerRadius="@*android:dimen/glowpadview_target_placement_radius"  
  18.     prvandroid:outerRingDrawable="@*android:drawable/ic_lockscreen_outerring"  
  19.     prvandroid:snapMargin="@*android:dimen/glowpadview_snap_margin"  
  20.     prvandroid:vibrationDuration="20"  
  21.     prvandroid:feedbackCount="1"  
  22.     prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"  
  23.     prvandroid:pointDrawable="@*android:drawable/ic_lockscreen_glowdot"  
  24.     />  

名詞解釋:

1. targetDrawables

來電接聽控件默認有三個處理事件:接聽、拒接、短信回覆。這裏的@arrary/incoming_call_widget_3way_targets實際內容如下:

[html] view plaincopy
  1. <array name="incoming_call_widget_3way_targets">  
  2.     <item>@drawable/ic_lockscreen_answer</item>  
  3.     <item>@drawable/ic_lockscreen_text</item>  
  4.     <item>@drawable/ic_lockscreen_decline</item>  
  5.     <item>@null</item>"  
  6. </array>  
2. targetDescriptions

針對接聽控件對應的描述文字。內容如下:

[html] view plaincopy
  1. <array name="incoming_call_widget_3way_target_descriptions">  
  2.     <item>@string/description_target_answer</item>  
  3.     <item>@string/description_target_send_sms</item>  
  4.     <item>@string/description_target_decline</item>  
  5.     <item>@null</item>"  
  6. </array>  
3. directionDescriptions

對滑動接聽控件方向的描述,內容如下:

[html] view plaincopy
  1. <array name="incoming_call_widget_3way_direction_descriptions">  
  2.     <item>@*android:string/description_direction_right</item>  
  3.     <item>@*android:string/description_direction_up</item>  
  4.     <item>@*android:string/description_direction_left</item>  
  5.     <item>@null</item>  
  6. </array>  
4. handleDrawable

這個就是中間按個小圓圈的圖片資源

5. innerRadius

內圓的半徑大小。這裏說的內圓使我們看不到的,與後面提到的外圓對應起來。當來電時會有一個小白點從中心向外擴散的動畫,這裏的起點就是從innerRadius開始的。

6. outerRadius

外圓的半徑大小。與前面的內圓對應起來,都是用於輔助顯示小白點動畫的,外圓就是動畫的截止點,內圓爲起始點。

7. outerRingDrawable

外圓的邊界線。這是通過shape配置畫出來的。代碼如下:

[html] view plaincopy
  1. <shape xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:shape="oval"  
  3.     >  
  4.     <size android:height="@dimen/keyguard_lockscreen_outerring_diameter"  
  5.           android:width="@dimen/keyguard_lockscreen_outerring_diameter" />  
  6.     <solid android:color="#00000000" />  
  7.     <stroke android:color="#1affffff" android:width="2dp" />  
  8. </shape>  
在Android 4.2上我們已經看不到這條邊界線了,但通過改變solid裏的color值和stroke李的color值可以將其顯示出來,在Android4.0上就是這麼做的。設置邊界線有利於targets的防止,畢竟寬度和高度都有了,位置自然很容易得出,也便於控制。

8. snapMargin

距離target多遠會達到觸發條件。也就是在來電時,如果我們點擊中間的按鈕並逐漸向接聽側滑動,當滑動到一定的位置時,會自動將將接聽按鈕的狀態改變,隨之圖片也會改變。這裏的snapMargin就是用來判斷我們手指與target距離的。

9. vibrationDuration

震動持續時長。

10. feedbackCount

動畫出現的次數。也就是來電時,小白點從內向外擴散,這種效果只有一次。這裏爲什麼會有這個參數呢?因爲在Android 4.0時,那個時候還沒有小白點,只有水波紋,而且這個值也默認是3,我們可以看到來電時,會閃動3個水波紋,Android 4.2在其基礎上進行了修改,但爲了保留原來的結構,因此並沒有大刀闊斧的刪掉這些代碼。

11. glowRadius

這個是光暈半徑。也就是當我們按下並移動時,跟隨我們手指移動的那一小團小白點。在4.0中是handleDrawable會跟着移動,4.2中但出發了onTouchEvent後,handleDrawable就會消失,取而代之的是出現一小圈小白點,也就是這裏的光暈半徑。

12. pointDrawable

這就是那個小白點的資源。

說明圖如下:




更多0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章