Android-绘制简单的几何图形

2019-07-17  本文已影响0人  见哥哥长高了

android.graphics为我们提供了一些列的类,我们可以应用这些类来绘制2D向量图形。一些常见的类如下:

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Shader;

其中在图形绘制上最重要的类是:Canvas和Paint。
Canvas相当于一张图纸,所有的图形都在它的上面绘制出来;
Paint相当于画笔,可以设置不同的颜色 绘制不同的图形
接下来我们就以简单的实例来说明几何图形的绘制方法:
首先:自定义继承View的MyView,并设置当前activity的contentView为MyView

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyView myView = new MyView(this);
        setContentView(myView);
}
private class MyView extends View{

        public MyView(Context context){

            super(context);
        }
}

覆盖MyView类的onDraw方法:

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

            //设置背景为白色
            canvas.drawColor(Color.WHITE);

            Paint paint = new Paint();

            //去锯齿
            paint.setAntiAlias(true);

            //设置paint颜色
            paint.setColor(Color.RED);
}

接下来就是具体的绘制过程了,绘制代码在onDraw方法中实现:
绘制空心圆形 空心正方形 空心长方形 空心椭圆形 空心三角型 和空心梯形


            /**
             *         FILL,
             *         FILL_AND_STROKE,
             *         STROKE;
             */
            //设置paint的style为空心
            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 rectF = new RectF(10,220,70,250);
            canvas.drawOval(rectF,paint);


            //画一个空心三角形
            Path path = new Path();
            path.moveTo(10,300);
            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 rectF1 = new RectF(90,220,150,250);
            canvas.drawOval(rectF1,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 shader = new LinearGradient(0,0,100,100,new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW},null,Shader.TileMode.REPEAT);

            //画一个渐变色的圆形
            paint.setShader(shader);

            //画一个渐变色的正方形
            canvas.drawCircle(200,40,30,paint);

            //画一个渐变色的正方形
            canvas.drawRect(170,90,230,150,paint);

            //画一个渐变色的长方形
            canvas.drawRect(170,170,230,200,paint);

            //画一个渐变色的椭圆形
            RectF rectF2 = new RectF(170,220,230,250);
            canvas.drawOval(rectF2,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);

我们除了可以利用以上方法绘制几何图形以外,我们还可以canvas的drawText方法来绘制文字,使用实例如下

            //绘制文字
            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);

上一篇下一篇

猜你喜欢

热点阅读