`
xueyi_lee
  • 浏览: 36142 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android.graphics类绘制2D图形

阅读更多
注:来自豆豆网

本范例将运用Paint对象(绘笔)的设置值不同,在Cavas(画布)上绘制空心、实习及渐变色的多种几何多形。先看下效果图:
[img]
http://img.ddvip.com/2010_08_19/1282198406_ddvip_4318.gif
[/img]

范例:主程序中继承自Android.view.View的 MyView类,重写 MyView的onDraw()方法,一开始就会运行绘制的工作,在onDraw()中以Paint将几何图形绘制在Canvas上,以 paint.setColor() 改变图形颜色、以 paint.setStyle()的设置来控制画出的的图形是空心还是实心。程序的最后一段,就是直接在Canvas写上文字,随着Paint对象里的属性设置,也会有不同的外观模式。
package com.graphices; 
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Path;
import android.graphics.Shader;
import android.graphics.LinearGradient;
public class GraphicesActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /*设置ContentView为自定义的MyVieW*/
        MyView myView=new MyView(this);
        setContentView(myView);
    }

    /* 自定义继承View 的MyView*/
        private class MyView extends View{
     public MyView(Context context){
        super(context) ;
     }
     
     @Override
     protected void onDraw(Canvas canvas)
     {   
         super.onDraw(canvas);
         /*设置背景为白色*/
         canvas.drawColor(Color.WHITE);
          Paint paint=new Paint();
          /*去锯齿*/
          paint.setAntiAlias(true);
          /*设置paint的颜色*/
          paint.setColor(Color.RED);
          /*设置paint的 style 为STROKE:空心*/
          paint.setStyle(Paint.Style.STROKE);
          /*设置paint的外框宽度*/
          paint.setStrokeWidth(3);
          /*画一个空心圆形*/
          canvas.drawCircle(40, 40, 30, paint);
          /*画一个空心正方形*/
          canvas.drawRect(10, 90, 70, 150, paint);
          /*画一个空心长方形*/
          canvas.drawRect(10, 170, 70,200, paint);
          /*画一个空心椭圆形*/
          RectF re=new RectF(10,220,70,250);
          canvas.drawOval(re, paint);
          /*画一个空心三角形*/
          Path path=new Path();
          path.moveTo(10, 330);
          path.lineTo(70,330);
          path.lineTo(40,270);
          path.close();
          canvas.drawPath(path, paint);
          /*画一个空心梯形*/
          Path path1=new Path();
          path1.moveTo(10, 410);
          path1.lineTo(70,410);
          path1.lineTo(55,350);
          path1.lineTo(25, 350);
          path1.close();
          canvas.drawPath(path1, paint);
          
          /*设置paint 的style为 FILL:实心*/
          paint.setStyle(Paint.Style.FILL);
          /*设置paint的颜色*/
          paint.setColor(Color.BLUE);
          /*画一个实心圆*/
          canvas.drawCircle(120,40,30, paint);
          /*画一个实心正方形*/
          canvas.drawRect(90, 90, 150, 150, paint);
          /*画一个实心长方形*/
          canvas.drawRect(90, 170, 150,200, paint);
          /*画一个实心椭圆*/
          RectF re2=new RectF(90,220,150,250);
          canvas.drawOval(re2, paint);
          /*画一个实心三角形*/
          Path path2=new Path();
          path2.moveTo(90, 330);
          path2.lineTo(150,330);
          path2.lineTo(120,270);
          path2.close();// If the current point is not equal to the first point of the contour, a line segment is automatically added.看来还挺智能的
          canvas.drawPath(path2, paint);
          /*画一个实心梯形*/
          Path path3=new Path();
          path3.moveTo(90, 410);
          path3.lineTo(150,410);
          path3.lineTo(135,350);
          path3.lineTo(105, 350);
          path3.close();
          canvas.drawPath(path3, paint);
          /*设置渐变色*/
          Shader mShader=new LinearGradient(0,0,100,100,
                  new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW},
                  null,Shader.TileMode.REPEAT);
          paint.setShader(mShader);
        
          /*画一个渐变色圆*/
          canvas.drawCircle(200,40,30, paint);
          /*画一个渐变色正方形*/
          canvas.drawRect(170, 90, 230, 150, paint);
          /*画一个渐变色长方形*/
          canvas.drawRect(170, 170, 230,200, paint);
          /*画一个渐变色椭圆*/
          RectF re3=new RectF(170,220,230,250);
          canvas.drawOval(re3, paint);
          /*画一个渐变色三角形*/
          Path path4=new Path();
          path4.moveTo(170,330);
          path4.lineTo(230,330);
          path4.lineTo(200,270);
          path4.close();
          canvas.drawPath(path4, paint);
          /*画一个渐变色梯形*/
          Path path5=new Path();
          path5.moveTo(170, 410);
          path5.lineTo(230,410);
          path5.lineTo(215,350);
          path5.lineTo(185, 350);
          path5.close();
          canvas.drawPath(path5, paint);
          
          /*写字*/
          paint.setTextSize(24);
          canvas.drawText(getResources().getString(R.string.str_text1), 240, 50, paint);
          canvas.drawText(getResources().getString(R.string.str_text2), 240, 120, paint);
          canvas.drawText(getResources().getString(R.string.str_text3), 240, 190, paint);
          canvas.drawText(getResources().getString(R.string.str_text4), 240, 250, paint);
          canvas.drawText(getResources().getString(R.string.str_text5), 240, 320, paint);
          canvas.drawText(getResources().getString(R.string.str_text6), 240, 390, paint);  
     }
}
}


分享到:
评论

相关推荐

    android graphics.rar

    "android graphics.rar"这个压缩包可能包含了关于Android图形系统的一些详细资料,如源代码、示例项目、教程文档等,用于帮助开发者理解和掌握Android图形编程的相关知识。 Android图形系统主要由以下几个关键组件...

    dotnet 控制台 使用 Microsoft.Maui.Graphics 配合 Skia 进行绘图入门.rar

    Microsoft.Maui.Graphics是.NET MAUI框架的一部分,它是一个跨平台的2D图形库,支持多种操作系统,包括iOS、Android、Windows和macOS。这个库提供了丰富的API,使得开发者可以方便地创建和操作图形、形状和文本,...

    Android图形处理.ppt

    此外,Android还提供了2D图形处理类,位于`android.graphics`、`android.graphics.drawable.shapes`和`android.view.animation`包中,以及3D图形处理,依赖于OpenGL ES,相关的类位于`javax.microedition.khronos....

    Android图形图像处理技术研究.pdf

    绘制几何图形可以使用Canvas类提供的方法,绘制文本可以使用drawText()和drawPosText()方法,绘制路径可以使用android.graphics.Path类来实现,绘制图片可以使用Canvas类提供的drawBitmap()方法。 4. 动画技术 ...

    android绘图方法.doc

    这两个方法都是基于Skia库,一个强大的2D图形渲染引擎,为Android提供了丰富的图形绘制能力。 1. Simple Graphics in View: 这种方式适用于简单图形和动画的展示,如图片、形状、颜色和预定义的动画。Android已经...

    graphics-2d

    在这个"AndroidGraphics2D-master"压缩包中,很可能包含了关于如何在Android应用中进行2D图形编程的示例代码和教程。 在Android 2D绘图中,核心组件是`Canvas`和`Paint`。`Canvas`可以视为画布,开发者在其上进行...

    Android印章图像绘制

    Android的Graphics API是基于Skia图形库的,它提供了一系列的类和方法,用于在Android视图上绘制文本、图像、线条和其他基本图形。在Android中绘制印章,我们需要使用`Canvas`类,它是绘制操作的主要接口,以及`...

    AndroidGraphics

    Android Graphics系统包括2D和3D图形库,为开发者提供了绘制2D图像、文字、形状以及进行复杂的动画设计的能力。其核心组件包括Canvas、Paint、Bitmap等。 1. Canvas:Canvas是画布,你可以将其想象为艺术家绘画的...

    绘制几何图形

    Android提供了丰富的API来支持2D图形的绘制,主要集中在`android.graphics`包下。在这个包里,有如`Canvas`、`Paint`、`Path`等关键类,它们是进行图形绘制的核心工具。 1. `Canvas`:可以理解为画布,用于绘制图形...

    Android 图形系统的分析与移植

    - `android.graphics`:用于2D图形开发的基础类库。 - `android.view`:提供视图管理和布局管理的功能。 - `android.widget`:包含各种UI组件,如按钮、文本框等。 - `android.opengl`:用于3D图形开发,基于OpenGL/...

    本示例 作为 绘制图形示例,主要包括绘制像素点、直线、圆形、弧、文本

    例如,在Python的PIL(Pillow)库或Java的Graphics2D类中,我们可以指定(x, y)位置并设置像素的颜色。 2. **绘制直线**:直线是通过两个点连接而成的。在编程中,我们可以使用Bresenham算法或其他线性插值方法来...

    Android图形系统的分析与移植

    其中,前三者主要用于2D图形开发,基于Skia Graphics Library (SGl);`android.opengl`则用于3D图形开发,基于OpenGL/ES。 - **Skia**:这是一个开源的2D矢量图形处理库,具有高效能和简洁的特点。它包含了字体渲染...

    Apress.Pro.Android.Games.3rd.Edition,2015

    - **第4章:使用OpenGLES实现高效的图形处理和可移植性** - 深入探讨Open Graphics Library for Embedded Systems (OpenGLES)在Android游戏中的应用。 - **第5章至第7章:3D射击游戏的开发** - 分别介绍了如何为Doom...

    我也模仿了Path效果,效果更接近iphone_Android.rar

    在Android开发中,`android.graphics.Path` 是一个用于描述矢量图形路径的对象。开发者可以使用它来定义自定义的形状,如圆形、矩形、贝塞尔曲线等,并在Canvas上进行绘制。Path对象支持各种路径操作,比如移动到、...

    Android中绘制图形的讲解

    OpenGL ES (Open Graphics Library for Embedded Systems) 是一个为嵌入式设备设计的图形库,用于渲染2D和3D图形。在Android中,OpenGL ES 2.0提供了一个强大的API集,允许开发者直接控制GPU,从而实现高效的图形...

    Java-API和Android-API

    8. **图形和动画**:`android.graphics`和`android.animation`,用于绘制2D图形和实现动态效果。 开发者在使用Java API进行一般应用开发时,主要关注的是跨平台的通用功能。而当转向Android API时,必须理解移动...

    Android2D练习一demo1

    总之,通过"Android2D练习一demo1",你可以了解到Android 2D图形绘制的基本流程和关键类的使用。这是一个很好的起点,可以帮助你进一步探索更高级的图形效果,如动画、自定义视图组件等。不断实践和学习,你将在...

Global site tag (gtag.js) - Google Analytics