<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    Android開發(fā)(1):隨機(jī)繪制彩色實(shí)心圓

    本文介紹了如何利用Android的繪圖技術(shù)隨機(jī)繪制彩色實(shí)心圓。效果如圖1所示。


                          圖1

    這個程序的核心是畫布,也就是Canvas對象。要想在Canvas上繪制圖形,需要將Canvas放在View上。因此,首先需要建立一個畫布類,這個畫布類是View的子類。當(dāng)畫布刷新時,會調(diào)用onDraw方法來重繪制畫布,我們可以從onDraw方法的參數(shù)來獲得要繪制圖形的Canvas對象。

    由于畫布重繪時會清空所有的內(nèi)容,因此,要想繪制多個實(shí)心圓,需要使用一個List變量將曾經(jīng)繪制的實(shí)心圓的相關(guān)信息(圓心坐標(biāo)、半徑、畫筆顏色)保存起來,以便繪制下一個實(shí)心圓時重繪前面繪制的所有的實(shí)心圓。如果不用List對象保留繪制歷史,則只能繪制最后一個實(shí)心圓。下面來看看這個畫布類的代碼。


    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>();
        
    // 保存實(shí)心圓相關(guān)信息的類
        public static class CircleInfo
        {
            
    private float x;                //  圓心橫坐標(biāo)
            private float y;                //  圓心縱坐標(biāo)
            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);
        }
            
    //  當(dāng)畫布重繪時調(diào)用該方法,Canvas表示畫布對象,可以在該對象上繪制基本的圖形
        @Override
        
    protected void onDraw(Canvas canvas)
        {
            
    super.onDraw(canvas);
            //  根據(jù)保存的繪制歷史重繪所有的實(shí)心圓
            for (CircleInfo circleInfo : mCircleInfos)
            {
                Paint paint 
    = new Paint();
                
    //  設(shè)置畫筆顏色
                paint.setColor(circleInfo.getColor());
                
    //  繪制實(shí)心圓
                canvas.drawCircle(circleInfo.getX(), circleInfo.getY(), circleInfo.getRadius(), paint);
            }
        }
    }

    下面我們來編寫主程序。在創(chuàng)建工程時會要求輸入一個“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節(jié)配置的main.xml文件)
            ViewGroup viewGroup = (ViewGroup)getLayoutInflater().inflate(R.layout.main, null);
            mCircleCanvas 
    = new CircleCanvas(this);        //  創(chuàng)建CircleCanvas(畫布類)對象
              
    //  將CircleCanvas對象添加到當(dāng)前界面的視圖中(兩個按鈕的下方)
            viewGroup.addView(mCircleCanvas, new LayoutParams(LayoutParams.FILL_PARENT, 350));
            setContentView(viewGroup);
        }
        
    //  開始隨機(jī)繪制圓形(第一個按鈕的單擊事件)
        public void onClick_DrawRandomCircle(View view)
        {
            Random random 
    = new Random();
            
    float randomX =(float)( 100 + random.nextInt(100));        //  隨機(jī)生成圓心橫坐標(biāo)(100至200)
            float randomY =(float)( 100 + random.nextInt(100));         //  隨機(jī)生成圓心縱坐標(biāo)(100至200)
            float randomRadius =(float)( 20 + random.nextInt(40));     //  隨機(jī)生成圓的半徑(20至60)
            int randomColor = 0;
            
    //  產(chǎn)生0至100的隨機(jī)數(shù),若產(chǎn)生的隨機(jī)數(shù)大于50,則畫筆顏色為藍(lán)色
            if(random.nextInt(100> 50)
            {
                randomColor 
    = Color.BLUE;
            }
            
    else
            {
    //  產(chǎn)生0至100的隨機(jī)數(shù),若產(chǎn)生的隨機(jī)數(shù)大于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);        
    //  將當(dāng)前繪制的實(shí)心圓信息加到List對象中
            mCircleCanvas.invalidate();                    //  使畫布重繪
        }
        
    //  清空畫布(第二個按鈕的單擊事件)
        public void onClick_Clear(View view)
        {
            mCircleCanvas.mCircleInfos.clear();               
    //  清除繪制歷史
            mCircleCanvas.invalidate();                    //  使畫布重繪
        }
    }

    本文截選自《Android開發(fā)權(quán)威指南》,如需轉(zhuǎn)載,請注明出處。




    Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2011-09-06 16:06 銀河使者 閱讀(9687) 評論(2)  編輯  收藏 所屬分類: java 原創(chuàng)GoogleAndroid/OPhone

    評論

    # re: Android開發(fā)(1):隨機(jī)繪制彩色實(shí)心圓  回復(fù)  更多評論   

    學(xué)習(xí)了 哈哈
    2011-09-09 08:24 | tbw

    # re: Android開發(fā)(1):隨機(jī)繪制彩色實(shí)心圓  回復(fù)  更多評論   

    JAVA果然強(qiáng)大。
    2011-12-11 12:18 | tbw淘寶商城
    主站蜘蛛池模板: 亚洲偷自精品三十六区| 免费毛片a在线观看67194| 亚洲色少妇熟女11p| 亚洲邪恶天堂影院在线观看| 亚洲免费在线观看| 国产精品成人四虎免费视频| 可以免费看的卡一卡二| 亚洲成年人免费网站| 精品成人免费自拍视频| 亚洲一区二区三区免费| 猫咪www免费人成网站| 亚洲AV无码成人精品区日韩 | 免费A级毛片无码A∨| 中文字幕免费观看全部电影| 思思久久99热免费精品6| 激情小说亚洲图片| 亚洲av无码av在线播放| 亚洲一区二区三区成人网站 | 亚洲一级毛片免费看| 9420免费高清在线视频| 免费无遮挡无码永久视频| 日韩免费电影网址| 无码AV片在线观看免费| 日本亚洲欧洲免费天堂午夜看片女人员 | 四虎成人精品国产永久免费无码| 日韩成人精品日本亚洲| 亚洲AV成人精品日韩一区| 亚洲av无码一区二区三区天堂 | 国产高清免费观看| 国产真实伦在线视频免费观看| 在线观着免费观看国产黄| 国产成人青青热久免费精品| 国产成人免费ā片在线观看| 四虎永久免费观看| 亚洲精品偷拍视频免费观看| 久久精品国产亚洲Aⅴ香蕉| 国产成人精品日本亚洲| 亚洲色图综合网站| 亚洲色精品VR一区区三区| 亚洲AV无码资源在线观看| 午夜亚洲国产精品福利|