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开发权威指南》,如需转载,请注明出处。

本文转自银河使者博客园博客,原文链接http://www.cnblogs.com/nokiaguy/archive/2011/09/06/2169157.html如需转载请自行联系原作者


银河使者

相关文章
|
1月前
|
缓存 搜索推荐 Android开发
安卓开发中的自定义控件实践
【10月更文挑战第4天】在安卓开发的海洋中,自定义控件是那片璀璨的星辰。它不仅让应用界面设计变得丰富多彩,还提升了用户体验。本文将带你探索自定义控件的核心概念、实现过程以及优化技巧,让你的应用在众多竞争者中脱颖而出。
|
1天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
1天前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
9天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
8天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
20 5
|
6天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
7天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
22 3
|
10天前
|
存储 IDE 开发工具
探索Android开发之旅:从新手到专家
【10月更文挑战第26天】在这篇文章中,我们将一起踏上一段激动人心的旅程,探索如何在Android平台上从零开始,最终成为一名熟练的开发者。通过简单易懂的语言和实际代码示例,本文将引导你了解Android开发的基础知识、关键概念以及如何实现一个基本的应用程序。无论你是编程新手还是希望扩展你的技术栈,这篇文章都将为你提供价值和启发。让我们开始吧!
|
15天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
44 5
|
14天前
|
设计模式 IDE Java
探索安卓开发:从新手到专家的旅程
【10月更文挑战第22天】 在数字时代的浪潮中,移动应用开发如同一座金矿,吸引着无数探险者。本文将作为你的指南针,指引你进入安卓开发的广阔天地。我们将一起揭开安卓平台的神秘面纱,从搭建开发环境到掌握核心概念,再到深入理解安卓架构。无论你是初涉编程的新手,还是渴望进阶的开发者,这段旅程都将为你带来宝贵的知识和经验的财富。让我们开始吧!
下一篇
无影云桌面