`
hsyzijvaa
  • 浏览: 111744 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多


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表示画布对象,可以在该对象上绘制基本的图形
    &#64;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);
        }
    }
}


下面我们来编写主程序。在创建工程时会要求输入一个&#8220;Create Activity&#8221;,由于我们输入的是&#8220;Main&#8221;,因此,生成的主类就是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;            //  定义一个画布类

    &#64;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开发权威指南》,如需转载,请注明出处。
转发微博,赢取《Android开发权威指南》,截止到9月12日,机会难得!活动地址:http://event.weibo.com/208255《Android开发权威指南》答疑论坛:http://books.51happyblog.com

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


华章培训网视频教程:实现Android版的多功能日历

《Android/OPhone开发完全讲义》(本书版权已输出到台湾)

样章和目录下载
互动网
当当网  卓越亚马逊


《人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS》

script.txt文件下载


样章下载
互动网





var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-16915591-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();


0
5
分享到:
评论

相关推荐

    绘制闪烁实心圆

    在计算机图形学中,"绘制闪烁实心圆"是一个常见的任务,它涉及到动态图形的创建,这在游戏开发、用户界面设计以及可视化应用等领域中非常常见。本话题将深入探讨如何利用自绘静态文本框来实现这个效果。 首先,我们...

    Android开发:Android Studio:动画与图形绘制.pdf

    Android开发:Android Studio:动画与图形绘制.pdf

    Android开发之性能优化:过渡绘制解决方案.docx

    1. **去除Activity自带的默认背景颜色**:Android的Theme主题中默认包含了窗口背景属性。如果不特别需要,可以通过在AppTheme中移除这个背景颜色来减少一层过渡绘制。 - 在AppTheme样式中添加: ```xml ...

    简易画图_MFC实心圆_shinningbu3_

    【简易画图_MFC实心圆_shinningbu3_】是一个基于MFC(Microsoft Foundation Classes)框架的小程序,主要用于教学或实践目的,帮助用户理解如何在Windows环境下利用MFC库来实现图形绘制功能,特别是绘制实心圆。...

    Android 使用MPAndroidChart:v3.1.0绘制动态折线图

    工作需要绘制一张可动态添加的折线图,经过筛选,选择MPAndroidChart:v3.1.0。 **使用方法:** 1、添加build gradle 在项目的build gradle中上述位置中添加“maven { url ‘https://jitpack.io’ }”这串代码。 ...

    圆形绘图仪:简单地绘制实心圆圈或圆形轮廓。-matlab开发

    除了文件交换站点上的圆形绘图仪之外,此功能还可以绘制任意数量的任意大小和 x,y 位置的圆。 输入可以是标量、向量或 ND 数组的任何逻辑组合。 可以使用 LineSpec 和 ColorSpec 名称-值对轻松格式化圆圈。 句法圆...

    绘制实心圆:绘制一个具有给定半径、中心和颜色的实心圆。-matlab开发

    FILLEDCIRCLE 实心圆绘图 fillCircle(CENTER,R,N,COLOR) 通过在外围使用 N 个点绘制一个以 CENTER 为中心,R 为半径的 COLOR 填充圆。 用法示例, fillCircle([1,3],3,1000,'b'); fillCircle([2,4],2,1000,'r'); ...

    Android OpenGL入门示例:绘制三角形和正方形

    在Android平台上,OpenGL ES(OpenGL for Embedded Systems)是用于图形渲染的重要库,广泛应用于游戏开发、3D模型显示等场景。本示例将带你入门Android中的OpenGL ES,通过绘制基本的几何图形——三角形和正方形,...

    Android自定义view之画圆环(手把手教你如何一步步画圆环)的示例

    总结来说,这个“Android自定义view之画圆环”的示例涵盖了许多Android开发中的核心概念,包括自定义View的创建、图形绘制、动画应用以及性能优化。通过学习和实践这个示例,开发者可以更好地理解和掌握Android图形...

    Android设置虚线、圆角、渐变

    在Android开发中,为UI元素添加虚线、圆角和渐变效果是常见的需求,可以提升应用的视觉吸引力。下面将详细讲解如何实现这些效果。 ### 一、虚线(Dashed Line) 在Android中,我们可以使用`Shape Drawable`来创建...

    Android开发 心电图绘制

    以下是对这个“Android开发 心电图绘制”项目的详细分析和相关知识点的阐述。 首先,自定义心电图意味着我们需要创建一个自定义的Android View类,继承自View或者ViewGroup。在这个类中,我们将重写onDraw()方法,...

    Android 自定义画布canvas 实现绘制和清空画布功能

    在Android开发中,自定义画布Canvas是实现图形绘制的核心工具。Canvas提供了丰富的API,允许开发者在屏幕上绘制各种形状、图像以及文字等。本教程将深入探讨如何利用Canvas实现绘制和清空画布的功能。 首先,我们...

    iClient for Android绘制圆对象

    本篇文章将详细讲解如何利用SuperMap iClient for Android实现绘制圆对象,帮助开发者在Android应用中创建具有地理定位功能的地图界面,并在其中进行图形绘制。 首先,要使用SuperMap iClient for Android,你需要...

    android OpenGL ES 地球仪绘制——球体绘制及纹理映射——源码

    支持如下: (1)opengl es绘制三角形拼成球体 (2)图片作为纹理映射到整个球面上 (3)双点触控缩放球体 (4)拖动旋转球体

    Android DrawText字符串的绘制

    Android DrawText 字符串的绘制 Android DrawText 字符串的绘制是 Android 平台上的一种常见的绘制技术,用于在屏幕上显示文字信息。在 Android 平台上,DrawText 字符串的绘制是通过使用 Canvas 和 Paint 对象来...

    android利用三角函数实现仿path菜单支持半圆和圆形及1/4圆

    4. **图形绘制**:Android提供了Canvas类,允许开发者在屏幕上绘制各种形状,包括圆形和弧线。我们可以利用Canvas的drawArc()方法绘制半圆或1/4圆,同时使用drawLine()或drawRect()来绘制连接菜单项的路径。 5. **...

    android曲线图的绘制

    在Android开发中,有时我们需要创建动态的、可定制的曲线图来展示数据,这通常涉及到自定义View的绘制。这个“android曲线图的绘制”是一个关于如何在Android平台上实现曲线图表的小型示例项目。该项目可能包含了一...

    Android OpenGL ES 绘制立方体 球体 圆柱 等几何形状

    总的来说,这个项目涉及了Android开发中的3D图形编程,通过OpenGL ES绘制不同类型的几何形状,每个形状作为一个独立的类实现,而renderer类则负责把这些形状渲染到屏幕上,创造出丰富的3D视觉效果。理解并掌握这些...

    Android-在空间中绘制随机飞行粒子形成星座

    在Android开发中,创建动态视觉效果,如"在空间中绘制随机飞行粒子形成星座",是一种常见的提升用户体验的手段。这种效果通常通过自定义View或者使用特定的图形库来实现。下面将详细介绍如何在Android应用中实现这样...

    Android开发笔记之:在ImageView上绘制圆环的实现方法

    在Android开发中,有时我们需要在界面上添加一些自定义的图形元素,比如在ImageView上绘制一个圆环。本文将详细讲解如何在ImageView上实现这一功能。我们主要关注三种方法中的第一种,即通过画布(Canvas)进行绘制...

Global site tag (gtag.js) - Google Analytics