Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android Launcher研究(四)——桌面應用快捷方式的開發

Android Launcher研究(四)——桌面應用快捷方式的開發

編輯:Android開發實例

大家好,今天我給大家分享的是Launcher桌面快捷圖標的開發,我們都知道快捷圖標有兩部分組成,一部分是應用的圖標,另一部分就是應用的名稱。其實Launcher中的快捷圖標只是繼承了TextView控件,重繪了一下,將背景弄成淺灰色(具體是什麼顏色我也不知道)的橢圓背景,顯示的文字顏色則是白色。TextView有android:drawableTop;drawableBottom(上下左右我這裡就不全寫出來了)屬性,用來顯示應用的圖標。

廢話不多說了,直接上例子,大家一步一步來,多敲敲代碼,成長快一點。

第一步:新建一個Android工程,命名為ApplicationDemo.如下圖:

第二步:在values目錄下新建colors.xml文件,定義一些要用的顏色,代碼如下:

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <resources> 
  3.     <color name="white">#FFFFFF</color> 
  4.     <color name="black">#000000</color>       
  5.     <color name="bubble_dark_background">#B2191919</color> 
  6. </resources> 

第三步:也就是重點了,新建一個BubbleTextView類,繼承TextView,代碼如下:

 

  1. package com.tutor.application;  
  2. import android.content.Context;  
  3. import android.graphics.Canvas;  
  4. import android.graphics.Paint;  
  5. import android.graphics.RectF;  
  6. import android.text.Layout;  
  7. import android.util.AttributeSet;  
  8. import android.widget.TextView;  
  9. public class BubbleTextView extends TextView {  
  10.     private static final int CORNER_RADIUS = 8;  
  11.     private static final int PADDING_H = 5;  
  12.     private static final int PADDING_V = 1;  
  13.     private final RectF mRect = new RectF();  
  14.     private Paint mPaint;  
  15.     public BubbleTextView(Context context) {  
  16.         super(context);  
  17.         init();  
  18.     }  
  19.     public BubbleTextView(Context context, AttributeSet attrs) {  
  20.         super(context, attrs);  
  21.         init();  
  22.     }  
  23.     public BubbleTextView(Context context, AttributeSet attrs, int defStyle) {  
  24.         super(context, attrs, defStyle);  
  25.         init();  
  26.     }  
  27.     private void init() {  
  28.         setFocusable(true);  
  29.         // We need extra padding below to prevent the bubble being cut.  
  30.         setPadding(PADDING_H, 0, PADDING_H, PADDING_V);  
  31.         mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);  
  32.         mPaint.setColor(getContext().getResources()  
  33.                 .getColor(R.color.bubble_dark_background));  
  34.     }  
  35.     @Override 
  36.     protected void drawableStateChanged() {  
  37.         invalidate();  
  38.         super.drawableStateChanged();  
  39.     }  
  40.     @Override 
  41.     public void draw(Canvas canvas) {  
  42.         final Layout layout = getLayout();  
  43.         final RectF rect = mRect;  
  44.         final int left = getCompoundPaddingLeft();  
  45.         final int top = getExtendedPaddingTop();  
  46.         rect.set(left + layout.getLineLeft(0) - PADDING_H,  
  47.                  top + layout.getLineTop(0) - PADDING_V,  
  48.                  Math.min(left + layout.getLineRight(0) + PADDING_H,  
  49.                           getScrollX() + getRight() - getLeft()),  
  50.                  top + layout.getLineBottom(0) + PADDING_V);  
  51.         canvas.drawRoundRect(rect, CORNER_RADIUS, CORNER_RADIUS, mPaint);  
  52.         super.draw(canvas);  
  53.     }  
  54. }  

第四步:修改main.xml布局文件,代碼如下:

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="vertical" 
  4.     android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent" 
  6.     > 
  7.     <TextView    
  8.         android:layout_width="wrap_content"   
  9.         android:layout_height="wrap_content"   
  10.         android:drawableTop="@drawable/icon" 
  11.         android:text="ApplicationDemo" 
  12.         android:textColor="@color/black" 
  13.         /> 
  14.     <com.tutor.application.BubbleTextView 
  15.         android:layout_width="wrap_content"   
  16.         android:layout_height="wrap_content" 
  17.         android:drawableTop="@drawable/icon"   
  18.         android:textColor="@color/white" 
  19.         android:text="ApplicationDemo" 
  20.     /> 
  21. </LinearLayout> 

第五步:修改AndroidManifest.xml文件,注意這裡我們在Activity裡增加了一個透明的樣式,Launcher其實就是透明的Activity。

代碼如下(第8行代碼):

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  3.       package="com.tutor.application" 
  4.       android:versionCode="1" 
  5.       android:versionName="1.0"> 
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
  7.         <activity android:name=".ApplicationDemo" 
  8.                   android:theme="@android:style/Theme.Wallpaper.NoTitleBar" 
  9.                   android:label="@string/app_name"> 
  10.             <intent-filter> 
  11.                 <action android:name="android.intent.action.MAIN" /> 
  12.                 <category android:name="android.intent.category.LAUNCHER" /> 
  13.             </intent-filter> 
  14.         </activity> 
  15.     </application> 
  16.     <uses-sdk android:minSdkVersion="7" /> 
  17. </manifest>  

第六步:運行上述工程,查看效果如下:

將android:drawableLeft修改為android:drawableTop,效果如下:

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved