zoukankan      html  css  js  c++  java
  • 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,效果如下:

    搞定!大功告成!

  • 相关阅读:
    安装补丁“此更新不适用于你的计算机”解决办法
    spanning-tree portfast什么意思?
    Win10离线安装.NET Framework 3.5的方法
    逐帧轮播图效果实现
    纯css实现同一页面下选择之后更换内容效果
    纯html+css中实现静态选座位效果技巧(input+label使用小技巧)
    js中实现杨辉三角
    用css实现html中单选框样式改变
    下划线hover下动态出现技巧
    CSS样式整理
  • 原文地址:https://www.cnblogs.com/greywolf/p/2831121.html
Copyright © 2011-2022 走看看