android开发(1):随机绘制彩色实心圆 -凯发k8网页登录

随笔 - 312, 文章 - 14, 评论 - 1393, 引用 - 0
数据加载中……

android开发(1):随机绘制彩色实心圆

本文介绍了如何利用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开发完全讲义(第2版)(本书凯发k8网页登录的版权已输出到台湾)



android高薪之路:android程序员面试宝典


新浪微博:   昵称:李宁_lining

posted on 2011-09-06 16:06 银河使者 阅读(9472) 评论(2)  编辑  收藏 所属分类: java 原创googleandroid/ophone

# re: android开发(1):随机绘制彩色实心圆  回复     

学习了 哈哈
2011-09-09 08:24 |

# re: android开发(1):随机绘制彩色实心圆  回复     

java果然强大。
2011-12-11 12:18 |
网站地图