Android學習筆記09:Paint及Canvas的簡單應用

來源:互聯網
上載者:User

 在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原始碼如下。

Android_OlympicLogo的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原始碼如下。

Android_OlympicLogo的MainActivity.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)方法載入該圖片。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.