zoukankan      html  css  js  c++  java
  • 绘制几何图形——使用android.graphics类

    范例说明

       “如何在和机上绘制2D图形呢?”这是许多android游戏开发都是常提到的问题,在android SDK 当中,并没有Java Graphics2D的函数可以使用,而是使用android.graphics底下的类来绘制2D向量图。这个package提供了许多在手机上绘制图形的类与方法,其中Canvas上,而Paint(Android.graphics.Paint)类则像是彩色铅笔,给予不同的调协,即可绘制不同颜色、不同种类效果的向量图形。

        本范例将运用Paint对象(绘笔)的设置值不同,在Cavas(画布)上绘制空心、实习及渐变色的多种几何多形。

    运行结果如果

    范例程序

       主程序中继承自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 {
        /** Called when the activity is first created. */
        @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) ;
         }
         /*重写onDraw()*/
         @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();
              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); 
         }
    }
    }

  • 相关阅读:
    【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)
    Educational Codeforces Round 73 (Rated for Div. 2)F(线段树,扫描线)
    【PAT甲级】1042 Shuffling Machine (20 分)
    【PAT甲级】1041 Be Unique (20 分)(多重集)
    【PAT甲级】1040 Longest Symmetric String (25 分)(cin.getline(s,1007))
    【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)
    Codeforces Round #588 (Div. 2)E(DFS,思维,__gcd,树)
    2017-3-9 SQL server 数据库
    2017-3-8 学生信息展示习题
    2017-3-5 C#基础 函数--递归
  • 原文地址:https://www.cnblogs.com/stulife/p/1803313.html
Copyright © 2011-2022 走看看