android绘制图形

 以前的文章里边画一般都是一些矩形,今天就看看怎么在android手机屏幕上绘制一些几何图形,如三角形、多边形、椭圆、圆形、正方形 等等。并且设置 空心、实心。下面我们先来看看

在android中可以绘制出那些几何图形

方法 说明
drawRect 绘制矩形
drawCircle 绘制圆形
drawOval 绘制椭圆
drawPath 绘制任意多边形
drawLine 绘制直线
drawPoin 绘制点


我们先来看看效果图吧:

6.png

 

 

下面我们就来看看代码是怎么做的:

 

Java代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="@string/hello"
  11. android:textColor="#00FF00"
  12. />
  13. <xiaohang.zhimeng.GameView
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. />
  17. </LinearLayout>
复制代码


Java代码:

  1. package eoe.demo;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. public class Activity01 extends Activity {
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.main);
  9. }
  10. }
复制代码


GameView

Java代码:

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


在android中还可以通过ShapDrawable来绘制图像,ShapDrawable可以设置画笔的形状。通过 getPaint 方法可以得到Paint对象,可以像前面一样设置这个画笔的颜色、尺寸等属性。然而,在ShapDrawable中提供了 setBounds 方法来设置图形显示的区域,最后通过ShapeDrawable 和 Draw方法将图形显示到屏幕上。 请见下边的代码

GameView2

Java代码:

  1. package eoe.Demo;
  2. import android.content.Context;
  3. import android.graphics.Canvas;
  4. import android.graphics.Color;
  5. import android.graphics.LinearGradient;
  6. import android.graphics.Paint;
  7. import android.graphics.Path;
  8. import android.graphics.Rect;
  9. import android.graphics.Shader;
  10. import android.graphics.drawable.ShapeDrawable;
  11. import android.graphics.drawable.shapes.OvalShape;
  12. import android.graphics.drawable.shapes.PathShape;
  13. import android.graphics.drawable.shapes.RectShape;
  14. import android.view.View;
  15. public class GameView2 extends View {
  16. // 声明ShapDrawable对象
  17. ShapeDrawable mShapeDrawable = null;
  18. public GameView2(Context context) {
  19. super(context);
  20. }
  21. public void DrawShape(Canvas canvas) {
  22. // 实例化ShapeDrawable对象并说明是绘制一个矩形
  23. mShapeDrawable = new ShapeDrawable(new RectShape());
  24. // 得到画笔paint对象并设置其颜色
  25. mShapeDrawable.getPaint().setColor(Color.RED);
  26. Rect bounds = new Rect(5, 250, 55, 280);
  27. // 设置图像显示的区域
  28. mShapeDrawable.setBounds(bounds);
  29. // 绘制图像
  30. mShapeDrawable.draw(canvas);
  31. /* =============================== */
  32. /* 实例化ShapeDrawable对象并说明是绘制一个椭圆 */
  33. mShapeDrawable = new ShapeDrawable(new OvalShape());
  34. // 得到画笔paint对象并设置其颜色
  35. mShapeDrawable.getPaint().setColor(Color.GREEN);
  36. // 设置图像显示的区域
  37. mShapeDrawable.setBounds(70, 250, 150, 280);
  38. // 绘制图像
  39. mShapeDrawable.draw(canvas);
  40. Path path1 = new Path();
  41. // 设置多边形
  42. path1.moveTo(150 + 5, 80 + 80 - 50);
  43. path1.lineTo(150 + 45, 80 + 80 - 50);
  44. path1.lineTo(150 + 30, 80 + 120 - 50);
  45. path1.lineTo(150 + 20, 80 + 120 - 50);
  46. // 使这些点封闭成多边形
  47. path1.close();
  48. // PathShape后面两个参数分别是高度和宽度
  49. mShapeDrawable = new ShapeDrawable(new PathShape(path1, 150, 150));
  50. // 得到画笔paint对象并设置其颜色
  51. mShapeDrawable.getPaint().setColor(Color.BLUE);
  52. // 设置图像显示的区域
  53. mShapeDrawable.setBounds(100, 170, 200, 280);
  54. // 绘制图像
  55. mShapeDrawable.draw(canvas);
  56. //绘制正方形
  57. mShapeDrawable = new ShapeDrawable(new RectShape());
  58. //得到画笔并设置颜色
  59. Paint xh_Paint = mShapeDrawable.getPaint();
  60. /*设置渐变色 这个正方形的颜色是改变的*/
  61. Shader mShader=new LinearGradient(0,0,100,100,
  62. new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW,Color.LTGRAY},
  63. null,Shader.TileMode.REPEAT);
  64. xh_Paint.setShader(mShader);
  65. mShapeDrawable.setBounds(250, 250, 280, 280);
  66. mShapeDrawable.draw(canvas);
  67. }
  68. }
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值