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   比较简单 但是为了保持完整我还是贴上来吧。


package xiaohang.zhimeng;

import android.app.Activity;
import android.os.Bundle;

public class Activity01 extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}
}

package xiaohang.zhimeng;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

public class GameView extends View implements Runnable {
	// 声明Paint对象
	private Paint mPaint = null;
	
	private GameView2 mGameView2 = null;
	
	public GameView(Context context, AttributeSet attr){
		super(context,attr);
		System.out.println(1);
		// 构建画笔对象
		mPaint = new Paint();

		mGameView2 = new GameView2(context);
		// 开启线程
		new Thread(this).start();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);

		// 设置画布为黑色背景
		canvas.drawColor(Color.BLACK);

		// 取消锯齿
		mPaint.setAntiAlias(true);

		// 设置画笔风格为空心
		mPaint.setStyle(Paint.Style.STROKE);

		{
			// 定义矩形对象
			Rect rect1 = new Rect();
			// 设置矩形大小
			rect1.left = 5;
			rect1.top = 5;
			rect1.bottom = 25;
			rect1.right = 45;

			mPaint.setColor(Color.BLUE);
			// 绘制矩形
			canvas.drawRect(rect1, mPaint);

			mPaint.setColor(Color.RED);
			// 绘制矩形
			canvas.drawRect(50, 5, 90, 25, mPaint);

			mPaint.setColor(Color.YELLOW);
			// 绘制圆形
			// 40 70 分别是圆心的X 和 Y坐标 30为半径 mPaint为画笔对象
			canvas.drawCircle(40, 70, 30, mPaint);

			// 定义椭圆
			RectF rectf1 = new RectF();
			rectf1.left = 80;
			rectf1.top = 30;
			rectf1.right = 120;
			rectf1.bottom = 70;

			mPaint.setColor(Color.LTGRAY);
			// 绘制椭圆
			canvas.drawOval(rectf1, mPaint);

			// 绘制多边形
			Path path1 = new Path();

			/**
			 * 这个多变形我也没试验它到底是怎么画 应该就是从起点 找点 一个点 一个点的连线
			 */
			path1.moveTo(150 + 5, 80 - 50); // 此点为多边形的起点
			path1.lineTo(150 + 45, 80 - 50);
			path1.lineTo(150 + 30, 120 - 50);
			path1.lineTo(150 + 20, 120 - 50);
			// 使这些点构成封闭的多边形
			path1.close();

			mPaint.setColor(Color.GRAY);
			// 绘制这个多边形
			canvas.drawPath(path1, mPaint);

			mPaint.setColor(Color.RED);
			// 设置画笔空心边框的宽度
			mPaint.setStrokeWidth(3);
			// 绘制直线
			// 这个绘制直线的方法 前2个参数是前点坐标 后 2个参数是 终点坐标我们可看出两个点的Y坐标都一样的
			canvas.drawLine(5, 110, 315, 110, mPaint);
		}

		// 绘制实心几何体
		// 将画笔设置为实心
		mPaint.setStyle(Paint.Style.FILL);
		{
			// 定义矩形
			Rect rect1 = new Rect();
			rect1.left = 5;
			rect1.top = 130 + 5;
			rect1.bottom = 130 + 25;
			rect1.right = 45;

			mPaint.setColor(Color.BLUE);
			// 绘制矩形
			canvas.drawRect(rect1, mPaint);

			mPaint.setColor(Color.RED);
			// 绘制矩形
			canvas.drawRect(50, 130 + 5, 90, 130 + 25, mPaint);

			mPaint.setColor(Color.YELLOW);
			// 绘制圆形 这里参数就不说明了 上边已经说了
			canvas.drawCircle(40, 130 + 70, 30, mPaint);

			// 定义椭圆对象
			RectF rectf1 = new RectF();
			// 设置椭圆大小
			rectf1.left = 80;
			rectf1.top = 130+30;
			rectf1.right = 120;
			rectf1.bottom = 130 + 70;

			mPaint.setColor(Color.LTGRAY);
			// 绘制椭圆
			canvas.drawOval(rectf1, mPaint);

			// 绘制多边形
			Path path1 = new Path();

			// 设置多边形的点
			path1.moveTo(150+5, 130+80-50);
			path1.lineTo(150+45, 130+80-50);
			path1.lineTo(150+30, 130+120-50);
			path1.lineTo(150+20, 130+120-50);
			// 使这些点构成封闭的多边形
			path1.close();
			mPaint.setColor(Color.GRAY);
			// 绘制这个多边形
			canvas.drawPath(path1, mPaint);

			mPaint.setColor(Color.RED);
			mPaint.setStrokeWidth(3);
			// 绘制直线
			canvas.drawLine(5, 130 + 110, 315, 130 + 110, mPaint);
		}
		// 通过ShapDrawable来绘制几何图形
		mGameView2.DrawShape(canvas);

	}

	@Override
	public void run() {
		while (!Thread.currentThread().isInterrupted()) {
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				Thread.currentThread().interrupt();
			}
			// 使用postInvalidate可以直接在线程中更新界面
			postInvalidate();
		}

	}

}

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

package xiaohang.zhimeng;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.Shader;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.graphics.drawable.shapes.PathShape;
import android.graphics.drawable.shapes.RectShape;
import android.view.View;

public class GameView2 extends View {

	// 声明ShapDrawable对象
	ShapeDrawable mShapeDrawable = null;

	public GameView2(Context context) {
		super(context);
	}

	public void DrawShape(Canvas canvas) {
		// 实例化ShapeDrawable对象并说明是绘制一个矩形
		mShapeDrawable = new ShapeDrawable(new RectShape());

		// 得到画笔paint对象并设置其颜色
		mShapeDrawable.getPaint().setColor(Color.RED);

		Rect bounds = new Rect(5, 250, 55, 280);

		// 设置图像显示的区域
		mShapeDrawable.setBounds(bounds);

		// 绘制图像
		mShapeDrawable.draw(canvas);
		/* =============================== */
		/* 实例化ShapeDrawable对象并说明是绘制一个椭圆 */
		mShapeDrawable = new ShapeDrawable(new OvalShape());

		// 得到画笔paint对象并设置其颜色
		mShapeDrawable.getPaint().setColor(Color.GREEN);

		// 设置图像显示的区域
		mShapeDrawable.setBounds(70, 250, 150, 280);

		// 绘制图像
		mShapeDrawable.draw(canvas);

		Path path1 = new Path();
		// 设置多边形
		path1.moveTo(150 + 5, 80 + 80 - 50);
		path1.lineTo(150 + 45, 80 + 80 - 50);
		path1.lineTo(150 + 30, 80 + 120 - 50);
		path1.lineTo(150 + 20, 80 + 120 - 50);
		// 使这些点封闭成多边形
		path1.close();

		// PathShape后面两个参数分别是高度和宽度
		mShapeDrawable = new ShapeDrawable(new PathShape(path1, 150, 150));

		// 得到画笔paint对象并设置其颜色
		mShapeDrawable.getPaint().setColor(Color.BLUE);

		// 设置图像显示的区域
		mShapeDrawable.setBounds(100, 170, 200, 280);

		// 绘制图像
		mShapeDrawable.draw(canvas);
		
		//绘制正方形
		mShapeDrawable = new ShapeDrawable(new RectShape());
		//得到画笔并设置颜色
		Paint xh_Paint = mShapeDrawable.getPaint();
		
		  /*设置渐变色 这个正方形的颜色是改变的*/
        Shader mShader=new LinearGradient(0,0,100,100,
                new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW,Color.LTGRAY},
                null,Shader.TileMode.REPEAT);
        xh_Paint.setShader(mShader);
		
		mShapeDrawable.setBounds(250, 250, 280, 280);
		mShapeDrawable.draw(canvas);
	}
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值