在Android中需要通過graphics類來顯示2D圖形。
graphics中包括了Canvas(畫布)、Paint(畫筆)、Color(顏色)、Bitmap(圖像)等常用的類。graphics具有繪制點、線、顏色、2D幾何圖形、圖像處理等功能。
1.Color(顏色)類
Android系統中顏色的常用表示方法有以下3種:
(1)int color = Color.BLUE;
(2)int color = Color.argb(150,200,0,100);
(3)在xml文件中定義顏色;
在實際應用當中,我們常用的顏色有以下一些,其顏色常量及其表示的顏色如下所示:
Color.BLACK 黑色 Color.GREEN 綠色
Color.BLUE 藍色 Color.LTGRAY 淺灰色
Color.CYAN 青綠色 Color.MAGENTA 紅紫色
Color.DKGRAY 灰黑色 Color.RED 紅色
Color.YELLOW 黃色 Color.TRANSPARENT 透明
Color.GRAY 灰色 Color.WHITE 白色
2.Paint(畫筆)類
要繪制圖形,首先得調整畫筆,按照自己的開發需要設置畫筆的相關屬性。Pain類的常用屬性設置方法如下:
setAntiAlias(); //設置畫筆的鋸齒效果
setColor(); //設置畫筆的顏色
setARGB(); //設置畫筆的A、R、G、B值
setAlpha(); //設置畫筆的Alpha值
setTextSize(); //設置字體的尺寸
setStyle(); //設置畫筆的風格(空心或實心)
setStrokeWidth(); //設置空心邊框的寬度
getColor(); //獲取畫筆的顏色
3.Canvas(畫布)類
畫筆屬性設置好之后,還需要將圖像繪制到畫布上。Canvas類可以用來實現各種圖形的繪制工作,如繪制直線、矩形、圓等等。Canvas繪制常用圖形的方法如下:
繪制直線:canvas.drawLine(float startX, float startY, float stopX, float stopY, Paint paint);
繪制矩形:canvas.drawRect(float left, float top, float right, float bottom, Paint paint);
繪制圓形:canvas.drawCircle(float cx, float cy, float radius, Paint paint);
繪制字符:canvas.drawText(String text, float x, float y, Paint paint);
繪制圖形:canvas.drawBirmap(Bitmap bitmap, float left, float top, Paint paint);
4.自定義View的基本實現方法
首先,我們需要自定義一個類,比如MyView,繼承於View類。然后,復寫View類的onDraw()函數。最后,在onDraw()函數中使用Paint和Canvas對象繪制我們需要的圖形。
5.動手實踐
在這里,我使用上面提到的一些方法,繪制了一幅簡單的北京奧運宣傳畫,包括奧運五環,“北京歡迎您”的宣傳標語以及福娃。做成后的效果圖如圖1所示。
圖1 Android_OlympicLogo效果圖
其中,使用了自定義的MyView類,在MyView類中,重寫了onDraw()函數,並定義幾種不同的畫筆,分別用來繪制各種顏色的奧運五環以及繪制字符串“北京歡迎您”等。具體的MyView.java源代碼如下。

1 package com.example.android_olympiclogo; 2 3 import android.view.View; 4 import android.content.Context; 5 import android.graphics.BitmapFactory; 6 import android.graphics.Canvas; 7 import android.graphics.Color; 8 import android.graphics.Paint; 9 import android.graphics.Paint.Style; 10 11 public class MyView extends View { 12 13 public MyView(Context context) { 14 super(context); 15 } 16 17 public void onDraw(Canvas canvas) { 18 19 Paint paint_blue = new Paint(); //繪制藍色的環 20 paint_blue.setColor(Color.BLUE); 21 paint_blue.setStyle(Style.STROKE); 22 paint_blue.setStrokeWidth(10); 23 canvas.drawCircle(110,150,60,paint_blue); 24 25 Paint paint_yellow = new Paint(); //繪制黃色的環 26 paint_yellow.setColor(Color.YELLOW); 27 paint_yellow.setStyle(Style.STROKE); 28 paint_yellow.setStrokeWidth(10); 29 canvas.drawCircle((float)175.5, 210, 60, paint_yellow); 30 31 Paint paint_black = new Paint(); //繪制黑色的環 32 paint_black.setColor(Color.BLACK); 33 paint_black.setStyle(Style.STROKE); 34 paint_black.setStrokeWidth(10); 35 canvas.drawCircle(245, 150, 60, paint_black); 36 37 Paint paint_green = new Paint(); //繪制綠色的環 38 paint_green.setColor(Color.GREEN); 39 paint_green.setStyle(Style.STROKE); 40 paint_green.setStrokeWidth(10); 41 canvas.drawCircle(311, 210, 60, paint_green); 42 43 Paint paint_red = new Paint(); //繪制紅色的環 44 paint_red.setColor(Color.RED); 45 paint_red.setStyle(Style.STROKE); 46 paint_red.setStrokeWidth(10); 47 canvas.drawCircle(380, 150, 60, paint_red); 48 49 Paint paint_string = new Paint(); //繪制字符串 50 paint_string.setColor(Color.BLUE); 51 paint_string.setTextSize(20); 52 canvas.drawText("Welcome to Beijing", 245, 310, paint_string); 53 54 Paint paint_line = new Paint(); //繪制直線 55 paint_line.setColor(Color.BLUE); 56 canvas.drawLine(240, 310, 425, 310, paint_line); 57 58 Paint paint_text = new Paint(); //繪制字符串 59 paint_text.setColor(Color.BLUE); 60 paint_text.setTextSize(20); 61 canvas.drawText("北京歡迎您", 275, 330, paint_text); 62 63 //繪制福娃圖片 64 canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.fuwa), 35, 340, paint_line); 65 } 66 }
此外,還需要將自定義的MyView視圖顯示到手機屏幕上,所以需要在MainAcitivity.java中加載MyView視圖,可以使用setContentView()方法,具體的MainAcitivity.java源代碼如下。

1 package com.example.android_olympiclogo; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.view.Menu; 6 import android.view.MenuItem; 7 import android.support.v4.app.NavUtils; 8 9 public class MainActivity extends Activity { 10 11 @Override 12 public void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 // setContentView(R.layout.activity_main); 15 setContentView(new MyView(this)); //加載MyView 16 } 17 18 @Override 19 public boolean onCreateOptionsMenu(Menu menu) { 20 getMenuInflater().inflate(R.menu.activity_main, menu); 21 return true; 22 } 23 24 }
當然了,還需要將福娃的圖片放在res下的drawable-hdpi目錄下。這樣才可以使用BitmapFactory.decodeResource(getResources(),R.drawable.fuwa)方法加載該圖片。