`
119568242
  • 浏览: 426940 次
  • 性别: Icon_minigender_1
  • 来自: 深圳/湛江
社区版块
存档分类
最新评论

[转]android 几何图形的绘制

 
阅读更多

转自:http://byandby.iteye.com/blog/826418

 

 以前的文章里边画一般都是一些矩形,今天就看看怎么在android手机屏幕上绘制一些几何图形,如三角形、多边形、椭圆、圆形、正方形 等等。并且设置 空心、实心。下面我们先来看看 
在android中可以绘制出那些几何图形 
     
     方法                                                                      说明 
    drawRect                                                              绘制矩形 
    drawCircle                                                            绘制圆形 
    drawOval                                                              绘制椭圆 
    drawPath                                                             绘制任意多边形 
    drawLine                                                              绘制直线 
    drawPoin                                                              绘制点
 

   我们先看看运行效果---------------------。。。。。 
 

  下面我们看例子吧 
  布局文件 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    android:textColor="#00FF00" 
    /> 
<xiaohang.zhimeng.GameView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
/>
 
</LinearLayout> 
   红色的部分 是我们自己实现的 GameView此类继承了View 我们把它作为布局文件的一部分加载了进来。 
  下边是代码 
Activity01   比较简单 但是为了保持完整我还是贴上来吧。 
Java代码  收藏代码
  1. package xiaohang.zhimeng;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5.   
  6. public class Activity01 extends Activity {  
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.     }  
  12. }  

   
  GameView 
Java代码  收藏代码
  1. package xiaohang.zhimeng;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Color;  
  6. import android.graphics.Paint;  
  7. import android.graphics.Path;  
  8. import android.graphics.Rect;  
  9. import android.graphics.RectF;  
  10. import android.util.AttributeSet;  
  11. import android.view.View;  
  12.   
  13. public class GameView extends View implements Runnable {  
  14.     // 声明Paint对象  
  15.     private Paint mPaint = null;  
  16.       
  17.     private GameView2 mGameView2 = null;  
  18.       
  19.     public GameView(Context context, AttributeSet attr){  
  20.         super(context,attr);  
  21.         System.out.println(1);  
  22.         // 构建画笔对象  
  23.         mPaint = new Paint();  
  24.   
  25.         mGameView2 = new GameView2(context);  
  26.         // 开启线程  
  27.         new Thread(this).start();  
  28.     }  
  29.   
  30.     @Override  
  31.     protected void onDraw(Canvas canvas) {  
  32.         super.onDraw(canvas);  
  33.   
  34.         // 设置画布为黑色背景  
  35.         canvas.drawColor(Color.BLACK);  
  36.   
  37.         // 取消锯齿  
  38.         mPaint.setAntiAlias(true);  
  39.   
  40.         // 设置画笔风格为空心  
  41.         mPaint.setStyle(Paint.Style.STROKE);  
  42.   
  43.         {  
  44.             // 定义矩形对象  
  45.             Rect rect1 = new Rect();  
  46.             // 设置矩形大小  
  47.             rect1.left = 5;  
  48.             rect1.top = 5;  
  49.             rect1.bottom = 25;  
  50.             rect1.right = 45;  
  51.   
  52.             mPaint.setColor(Color.BLUE);  
  53.             // 绘制矩形  
  54.             canvas.drawRect(rect1, mPaint);  
  55.   
  56.             mPaint.setColor(Color.RED);  
  57.             // 绘制矩形  
  58.             canvas.drawRect(5059025, mPaint);  
  59.   
  60.             mPaint.setColor(Color.YELLOW);  
  61.             // 绘制圆形  
  62.             // 40 70 分别是圆心的X 和 Y坐标 30为半径 mPaint为画笔对象  
  63.             canvas.drawCircle(407030, mPaint);  
  64.   
  65.             // 定义椭圆  
  66.             RectF rectf1 = new RectF();  
  67.             rectf1.left = 80;  
  68.             rectf1.top = 30;  
  69.             rectf1.right = 120;  
  70.             rectf1.bottom = 70;  
  71.   
  72.             mPaint.setColor(Color.LTGRAY);  
  73.             // 绘制椭圆  
  74.             canvas.drawOval(rectf1, mPaint);  
  75.   
  76.             // 绘制多边形  
  77.             Path path1 = new Path();  
  78.   
  79.             /** 
  80.              * 这个多变形我也没试验它到底是怎么画 应该就是从起点 找点 一个点 一个点的连线 
  81.              */  
  82.             path1.moveTo(150 + 580 - 50); // 此点为多边形的起点  
  83.             path1.lineTo(150 + 4580 - 50);  
  84.             path1.lineTo(150 + 30120 - 50);  
  85.             path1.lineTo(150 + 20120 - 50);  
  86.             // 使这些点构成封闭的多边形  
  87.             path1.close();  
  88.   
  89.             mPaint.setColor(Color.GRAY);  
  90.             // 绘制这个多边形  
  91.             canvas.drawPath(path1, mPaint);  
  92.   
  93.             mPaint.setColor(Color.RED);  
  94.             // 设置画笔空心边框的宽度  
  95.             mPaint.setStrokeWidth(3);  
  96.             // 绘制直线  
  97.             // 这个绘制直线的方法 前2个参数是前点坐标 后 2个参数是 终点坐标我们可看出两个点的Y坐标都一样的  
  98.             canvas.drawLine(5110315110, mPaint);  
  99.         }  
  100.   
  101.         // 绘制实心几何体  
  102.         // 将画笔设置为实心  
  103.         mPaint.setStyle(Paint.Style.FILL);  
  104.         {  
  105.             // 定义矩形  
  106.             Rect rect1 = new Rect();  
  107.             rect1.left = 5;  
  108.             rect1.top = 130 + 5;  
  109.             rect1.bottom = 130 + 25;  
  110.             rect1.right = 45;  
  111.   
  112.             mPaint.setColor(Color.BLUE);  
  113.             // 绘制矩形  
  114.             canvas.drawRect(rect1, mPaint);  
  115.   
  116.             mPaint.setColor(Color.RED);  
  117.             // 绘制矩形  
  118.             canvas.drawRect(50130 + 590130 + 25, mPaint);  
  119.   
  120.             mPaint.setColor(Color.YELLOW);  
  121.             // 绘制圆形 这里参数就不说明了 上边已经说了  
  122.             canvas.drawCircle(40130 + 7030, mPaint);  
  123.   
  124.             // 定义椭圆对象  
  125.             RectF rectf1 = new RectF();  
  126.             // 设置椭圆大小  
  127.             rectf1.left = 80;  
  128.             rectf1.top = 130+30;  
  129.             rectf1.right = 120;  
  130.             rectf1.bottom = 130 + 70;  
  131.   
  132.             mPaint.setColor(Color.LTGRAY);  
  133.             // 绘制椭圆  
  134.             canvas.drawOval(rectf1, mPaint);  
  135.   
  136.             // 绘制多边形  
  137.             Path path1 = new Path();  
  138.   
  139.             // 设置多边形的点  
  140.             path1.moveTo(150+5130+80-50);  
  141.             path1.lineTo(150+45130+80-50);  
  142.             path1.lineTo(150+30130+120-50);  
  143.             path1.lineTo(150+20130+120-50);  
  144.             // 使这些点构成封闭的多边形  
  145.             path1.close();  
  146.             mPaint.setColor(Color.GRAY);  
  147.             // 绘制这个多边形  
  148.             canvas.drawPath(path1, mPaint);  
  149.   
  150.             mPaint.setColor(Color.RED);  
  151.             mPaint.setStrokeWidth(3);  
  152.             // 绘制直线  
  153.             canvas.drawLine(5130 + 110315130 + 110, mPaint);  
  154.         }  
  155.         // 通过ShapDrawable来绘制几何图形  
  156.         mGameView2.DrawShape(canvas);  
  157.   
  158.     }  
  159.   
  160.     @Override  
  161.     public void run() {  
  162.         while (!Thread.currentThread().isInterrupted()) {  
  163.             try {  
  164.                 Thread.sleep(100);  
  165.             } catch (InterruptedException e) {  
  166.                 Thread.currentThread().interrupt();  
  167.             }  
  168.             // 使用postInvalidate可以直接在线程中更新界面  
  169.             postInvalidate();  
  170.         }  
  171.   
  172.     }  
  173.   
  174. }  


   在android中还可以通过ShapDrawable来绘制图像,ShapDrawable可以设置画笔的形状。通过 getPaint 方法可以得到Paint对象,可以像前面一样设置这个画笔的颜色、尺寸等属性。然而,在ShapDrawable中提供了 setBounds 方法来设置图形显示的区域,最后通过ShapeDrawable 和 Draw方法将图形显示到屏幕上。 请见下边的代码 
  GameView2 
Java代码  收藏代码
  1. package xiaohang.zhimeng;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Color;  
  6. import android.graphics.LinearGradient;  
  7. import android.graphics.Paint;  
  8. import android.graphics.Path;  
  9. import android.graphics.Rect;  
  10. import android.graphics.Shader;  
  11. import android.graphics.drawable.ShapeDrawable;  
  12. import android.graphics.drawable.shapes.OvalShape;  
  13. import android.graphics.drawable.shapes.PathShape;  
  14. import android.graphics.drawable.shapes.RectShape;  
  15. import android.view.View;  
  16.   
  17. public class GameView2 extends View {  
  18.   
  19.     // 声明ShapDrawable对象  
  20.     ShapeDrawable mShapeDrawable = null;  
  21.   
  22.     public GameView2(Context context) {  
  23.         super(context);  
  24.     }  
  25.   
  26.     public void DrawShape(Canvas canvas) {  
  27.         // 实例化ShapeDrawable对象并说明是绘制一个矩形  
  28.         mShapeDrawable = new ShapeDrawable(new RectShape());  
  29.   
  30.         // 得到画笔paint对象并设置其颜色  
  31.         mShapeDrawable.getPaint().setColor(Color.RED);  
  32.   
  33.         Rect bounds = new Rect(525055280);  
  34.   
  35.         // 设置图像显示的区域  
  36.         mShapeDrawable.setBounds(bounds);  
  37.   
  38.         // 绘制图像  
  39.         mShapeDrawable.draw(canvas);  
  40.         /* =============================== */  
  41.         /* 实例化ShapeDrawable对象并说明是绘制一个椭圆 */  
  42.         mShapeDrawable = new ShapeDrawable(new OvalShape());  
  43.   
  44.         // 得到画笔paint对象并设置其颜色  
  45.         mShapeDrawable.getPaint().setColor(Color.GREEN);  
  46.   
  47.         // 设置图像显示的区域  
  48.         mShapeDrawable.setBounds(70250150280);  
  49.   
  50.         // 绘制图像  
  51.         mShapeDrawable.draw(canvas);  
  52.   
  53.         Path path1 = new Path();  
  54.         // 设置多边形  
  55.         path1.moveTo(150 + 580 + 80 - 50);  
  56.         path1.lineTo(150 + 4580 + 80 - 50);  
  57.         path1.lineTo(150 + 3080 + 120 - 50);  
  58.         path1.lineTo(150 + 2080 + 120 - 50);  
  59.         // 使这些点封闭成多边形  
  60.         path1.close();  
  61.   
  62.         // PathShape后面两个参数分别是高度和宽度  
  63.         mShapeDrawable = new ShapeDrawable(new PathShape(path1, 150150));  
  64.   
  65.         // 得到画笔paint对象并设置其颜色  
  66.         mShapeDrawable.getPaint().setColor(Color.BLUE);  
  67.   
  68.         // 设置图像显示的区域  
  69.         mShapeDrawable.setBounds(100170200280);  
  70.   
  71.         // 绘制图像  
  72.         mShapeDrawable.draw(canvas);  
  73.           
  74.         //绘制正方形  
  75.         mShapeDrawable = new ShapeDrawable(new RectShape());  
  76.         //得到画笔并设置颜色  
  77.         Paint xh_Paint = mShapeDrawable.getPaint();  
  78.           
  79.           /*设置渐变色 这个正方形的颜色是改变的*/  
  80.         Shader mShader=new LinearGradient(0,0,100,100,  
  81.                 new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW,Color.LTGRAY},  
  82.                 null,Shader.TileMode.REPEAT);  
  83.         xh_Paint.setShader(mShader);  
  84.           
  85.         mShapeDrawable.setBounds(250250280280);  
  86.         mShapeDrawable.draw(canvas);  
  87.     }  
  88. }  


   大家感兴趣可以 下载源码 运行看看 
分享到:
评论

相关推荐

    android 几何图形的绘制

    在Android开发中,几何图形的绘制是创建用户界面和实现...总之,Android几何图形的绘制是一个涵盖广泛的主题,涉及到许多不同的API和技巧。熟练掌握这些技能,能让你在创建美观且交互丰富的应用程序时更加得心应手。

    android2D图形绘制

    在Android平台上,2D图形绘制是一项基础且重要的技术,它允许开发者创建丰富的用户界面和动态效果。本主题将深入探讨Android 2D图形绘制的核心概念、API和实践技巧。 首先,Android提供了两种主要的方式来实现2D...

    Android-Android自定义View之几何图形绘制

    本主题聚焦于“Android自定义View之几何图形绘制”,特别是如何利用Android的Canvas API来构建维度图表,如模仿京东白条个人信用评分的维普图。下面将详细介绍这个过程中的关键知识点。 首先,理解Android的View类...

    《android Graphics(一):概述及基本几何图形绘制》源码

    博客《android Graphics(一):概述及基本几何图形绘制》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/38875149

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

    程序员需要实现`onDrawFrame()`方法,这里进行所有的图形绘制逻辑。对于每个几何形状,都会有一个对应的绘制调用,比如`glDrawArrays()`或`glDrawElements()`,它们告诉OpenGL如何从缓冲区中提取数据并绘制到屏幕上...

    Android自定义View绘制几何图形

    本篇文章将详细讲解如何在Android中自定义View来绘制几何图形,以矩形为例,结合提供的`MyCanvas`示例进行解析。 首先,要创建一个自定义View,我们需要继承`View`或`ViewGroup`类。在这个例子中,我们将从`View`类...

    《android Graphics(一):基本图形绘制---几何形状、路径及文本》对应源码

    博客《android Graphics(一):基本图形绘制---几何形状、路径及文本》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/38875149

    绘制几何图形

    在安卓平台上,开发人员可以利用Android SDK中的Canvas类来实现绘制几何图形的功能。这个过程涉及到图形学的基本概念,以及Android视图系统的工作原理。Canvas是Android中用于在Bitmap上进行绘图的核心对象,它可以...

    Android中绘制常见的几何图形任务要求.pdf

    本文将深入探讨如何在Android中利用Canvas对象进行几何图形的绘制。 首先,Android中的自定义视图通常继承自`View`或`ViewGroup`类。在这个例子中,我们创建三个不同的视图类,分别为`Triangle`、`Rectangle`和`...

    android绘制几何图形的实例代码

    在Android开发中,自定义视图(View)是创建复杂用户界面的一种常见方式,它可以让我们在屏幕上绘制任意的几何图形。本实例展示了如何在Android应用中实现这一功能,通过继承`View`类并重写`onDraw()`方法来实现...

    Android中绘制常见的几何图形的代码清单.pdf

    本篇文章将详细介绍如何在Android应用中绘制常见的几何图形,如圆形和矩形。 1. **自定义视图基础** 自定义视图首先需要创建一个新的类,继承自`View`。例如,创建一个名为`Circle`的类,用于绘制圆形。在`Circle`...

    Android Path 解析 绘制图形

    总结,Android的`Path`类为开发者提供了强大的矢量图形绘制能力。通过理解和熟练运用`Path`的各个方法,可以创建出各种复杂的图形和动画效果。在实际项目中,结合自定义视图,如`PathView`,可以进一步提升用户体验...

    Android中为绘制的几何图形添加事件的任务要求.pdf

    2. **重写`onDraw()`**: 这是自定义视图的核心,使用`Canvas`对象的`drawXXX()`方法绘制几何图形。例如,对于矩形,我们可以调用`canvas.drawRect()`,对于圆使用`canvas.drawCircle()`,而三角形则可能需要通过`...

    Android绘制图形

    Android提供了多种方式来实现图形绘制,包括使用Canvas、Bitmap、Path、Paint等类。让我们深入探讨这些关键概念。 首先,Canvas是Android绘制的核心类,它是绘制2D图形的画布。你可以将它想象为一张白纸,而Paint则...

    android图形绘制

    在Android平台上,图形绘制是构建用户界面和实现视觉效果的关键技术。这个主题涵盖了各种基本图形元素的创建,包括圆形、正方形、长方形、椭圆、三角形和梯形,以及它们的空心与实心形态。让我们深入探讨一下Android...

    Android开发实现各种图形绘制功能示例

    在Android开发中,实现各种图形绘制是一项常见的任务,这通常涉及到自定义View的使用。本文主要探讨了如何在Android平台上通过自定义View类来绘制不同类型的图形,包括Bezier曲线、直线、椭圆和矩形。 首先,为了...

    Android OpenGl ES绘制圆点与优化圆点锯齿

    总的来说,绘制和优化圆点在Android OpenGL ES中涉及到几何、着色器编程和性能优化等多个方面。理解这些概念和技术对于开发高质量的图形应用至关重要。在实际项目中,开发者需要根据设备性能和应用需求来选择最适合...

    Android OpenGL ES 绘制三维/空间坐标系透明

    OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android系统中,它用于创建高性能的2D和3D图形。在这个主题中,我们主要关注如何在Android平台上使用OpenGL ES绘制一个透明的三维/空间坐标系。这个过程...

Global site tag (gtag.js) - Google Analytics