Android開發(1):隨機繪製彩色實心圓

來源:互聯網
上載者:User
本文介紹了如何利用Android的繪圖技術隨機繪製彩色實心圓。效果1所示。


                      圖1

這個程式的核心是畫布,也就是Canvas對象。要想在Canvas上繪製圖形,需要將Canvas放在View上。因此,首先需要建立一個畫布類,這個畫布類是View的子類。當畫布重新整理時,會調用onDraw方法來重繪製畫布,我們可以從onDraw方法的參數來獲得要繪製圖形的Canvas對象。

由於畫布重繪時會清空所有的內容,因此,要想繪製多個實心圓,需要使用一個List變數將曾經繪製的實心圓的相關資訊(圓心座標、半徑、畫筆顏色)儲存起來,以便繪製下一個實心圓時重繪前面繪製的所有的實心圓。如果不用List對象保留繪製曆史,則只能繪製最後一個實心圓。下面來看看這個畫布類的代碼。

package mobile.android.ch02.first;

import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;

public class CircleCanvas extends View
{
    //  儲存繪製曆史
    public List<CircleInfo> mCircleInfos = new ArrayList<CircleCanvas.CircleInfo>();
    
// 儲存實心圓相關資訊的類
    public static class CircleInfo
    {
        private float x;                //  圓心橫座標
        private float y;                //  圓心縱座標
        private float radius;            //  半徑
        private int color;            //  畫筆的顏色

        public float getX()
        {
            return x;
        }
        public void setX(float x)
        {
            this.x = x;
        }
        public float getY()
        {
            return y;
        }
        public void setY(float y)
        {
            this.y = y;
        }
        public float getRadius()
        {
            return radius;
        }
        public void setRadius(float radius)
        {
            this.radius = radius;
        }
        public int getColor()
        {
            return color;
        }
        public void setColor(int color)
        {
            this.color = color;
        }
    }
    public CircleCanvas(Context context)
    {
        super(context);
    }
        //  當畫布重繪時調用該方法,Canvas表示畫布對象,可以在該對象上繪製基本的圖形
    @Override
    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        //  根據儲存的繪製曆史重繪所有的實心圓
        for (CircleInfo circleInfo : mCircleInfos)
        {
            Paint paint = new Paint();
            //  設定畫筆顏色
            paint.setColor(circleInfo.getColor());
            //  繪製實心圓
            canvas.drawCircle(circleInfo.getX(), circleInfo.getY(), circleInfo.getRadius(), paint);
        }
    }
}

下面我們來編寫主程式。在建立工程時會要求輸入一個“Create Activity”,由於我們輸入的是“Main”,因此,產生的主類就是Main.java。開啟Main.java檔案,輸入如下的代碼。

package mobile.android.ch02.first;

import java.util.Random;
import mobile.android.first.CircleCanvas.CircleInfo;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;

public class Main extends Activity
{
    private CircleCanvas mCircleCanvas;            //  定義一個畫布類

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
           //  裝載布局檔案(在2.2.3節配置的main.xml檔案)
        ViewGroup viewGroup = (ViewGroup)getLayoutInflater().inflate(R.layout.main, null);
        mCircleCanvas = new CircleCanvas(this);        //  建立CircleCanvas(畫布類)對象
          //  將CircleCanvas對象添加到當前介面的視圖中(兩個按鈕的下方)
        viewGroup.addView(mCircleCanvas, new LayoutParams(LayoutParams.FILL_PARENT, 350));
        setContentView(viewGroup);
    }
    //  開始隨機繪製圓形(第一個按鈕的單擊事件)
    public void onClick_DrawRandomCircle(View view)
    {
        Random random = new Random();
        float randomX =(float)( 100 + random.nextInt(100));        //  隨機產生圓心橫座標(100至200)
        float randomY =(float)( 100 + random.nextInt(100));         //  隨機產生圓心縱座標(100至200)
        float randomRadius =(float)( 20 + random.nextInt(40));     //  隨機產生圓的半徑(20至60)
        int randomColor = 0;
        //  產生0至100的隨機數,若產生的隨機數大於50,則畫筆顏色為藍色
        if(random.nextInt(100) > 50)
        {
            randomColor = Color.BLUE;
        }
        else
        {
//  產生0至100的隨機數,若產生的隨機數大於50,則畫筆顏色為紅色
            if(random.nextInt(100) > 50)
                randomColor = Color.RED;
            //  否則,畫筆顏色為綠色
            else
                randomColor = Color.GREEN;
        }
        CircleInfo circleInfo = new CircleInfo();
        circleInfo.setX(randomX);
        circleInfo.setY(randomY);
        circleInfo.setRadius(randomRadius);
        circleInfo.setColor(randomColor);
        mCircleCanvas.mCircleInfos.add(circleInfo);        //  將當前繪製的實心圓資訊加到List對象中
        mCircleCanvas.invalidate();                    //  使畫布重繪
    }
    //  清空畫布(第二個按鈕的單擊事件)
    public void onClick_Clear(View view)
    {
        mCircleCanvas.mCircleInfos.clear();               //  清除繪製曆史
        mCircleCanvas.invalidate();                    //  使畫布重繪
    }
}

本文截選自《Android開發權威指南》,如需轉載,請註明出處。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.