[高级]Android Launcher研究(一)-----------图文详解手把手教你在Windows环境下下载Android源码(Launcher为例)Android Launcher研究(四)-----------桌面应用快捷方式的开发!

大家好,今天我给大家分享的是Launcher桌面快捷图标的开发,我们都知道快捷图标有两部分组成,一部分是应用的图标,另一部分就是应用的名称。其实Launcher中的快捷图标只是继承了TextView控件,重绘了一下,将背景弄成浅灰色(具体是什么颜色我也不知道)的椭圆背景,显示的文字颜色则是白色。TextView有android:drawableTop;drawableBottom(上下左右我这里就不全写出来了)属性,用来显示应用的图标。

废话不多说了,直接上例子,大家一步一步来,多敲敲代码,成长快一点。

第一步:新建一个Android工程,命名为ApplicationDemo.如下图:

第二步:在values目录下新建colors.xml文件,定义一些要用的颜色,代码如下:

 

[java] view plaincopy
 
  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,代码如下:

 

[java] view plaincopy
 
  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布局文件,代码如下:

 

[java] view plaincopy
 
  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行代码):

 

[java] view plaincopy
 
  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,效果如下:

Ok~大功告成,收工睡觉!!!

posted on 2015-04-27 14:53  troyjie  阅读(267)  评论(0编辑  收藏  举报