andriod自定义View绘制形, 圆形, 三角形,...

来源:互联网 发布:宇宙几维 知乎 编辑:程序博客网 时间:2024/06/14 05:41

我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆形,三角形,多边形等….
1.矩形

package com.lgl.view.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;/** * 矩形 */public class RectView extends View {    //无参    public RectView(Context context) {        super(context);    }    //有参    public RectView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        // 创建画笔        Paint p = new Paint();        //设置实心        p.setStyle(Paint.Style.FILL);        // 设置红色        p.setColor(Color.BLACK);        // 设置画笔的锯齿效果        p.setAntiAlias(true);        //绘制        canvas.drawRect(50, 100, 300, 300, p);    }}

这里写图片描述

圆形

package com.lgl.view.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;import android.view.WindowManager;/** * 圆 */public class CircleView extends View {    int width;    int height;    //无参    public CircleView(Context context) {        super(context);        init();    }    //有参    public CircleView(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    private void init() {        //获取屏幕的宽高        //Android绘图机制(一)——自定义View的基础属性和方法里面有讲        WindowManager wm = (WindowManager) getContext()                .getSystemService(Context.WINDOW_SERVICE);        width = wm.getDefaultDisplay().getWidth();        height = wm.getDefaultDisplay().getHeight();    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        Paint p = new Paint();        p.setColor(Color.BLACK);        // 设置画笔的锯齿效果        p.setAntiAlias(true);        canvas.drawCircle(width / 2, height / 2, width / 2, p);    }}

这里写图片描述

三角形

package com.lgl.view.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet;import android.view.View;/** * 三角形 */public class TrigonView extends View {    //无参    public TrigonView(Context context) {        super(context);    }    //有参    public TrigonView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        Paint p = new Paint();        p.setColor(Color.BLACK);        //实例化路径        Path path = new Path();        path.moveTo(80, 200);// 此点为多边形的起点        path.lineTo(120, 250);        path.lineTo(80, 250);        path.close(); // 使这些点构成封闭的多边形        canvas.drawPath(path, p);    }}

这里写图片描述
扇形

package com.lgl.view.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;/** * 扇形 */public class SectorView extends View {    public SectorView(Context context) {        super(context);    }    public SectorView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        // 创建画笔        Paint p = new Paint();        p.setColor(Color.BLACK);        RectF rectF = new RectF(60, 100, 200, 240);        canvas.drawArc(rectF, 200, 130, true, p);    }}

这里写图片描述

椭圆

package com.lgl.view.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;/** * 椭圆 */public class OvalView extends View {    public OvalView(Context context) {        super(context);    }    public OvalView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        // 创建画笔        Paint p = new Paint();        p.setColor(Color.BLACK);        RectF rectF = new RectF(60, 100, 200, 240);        rectF.set(210,100,250,130);        canvas.drawOval(rectF, p);    }}

曲线

package com.lgl.view.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet;import android.view.View;public class PathView extends View {    public PathView(Context context) {        super(context);    }    public PathView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        // 创建画笔        Paint p = new Paint();        p.setColor(Color.BLACK);        p.reset();        //设置空心        p.setStyle(Paint.Style.STROKE);        Path path = new Path();        path.moveTo(100, 320);//设置Path的起点        path.quadTo(150, 310, 170, 400);  //设置路径点和终点        canvas.drawPath(path, p);    }}

这里写图片描述

文字和图片

package com.lgl.view.view;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;import com.lgl.view.R;public class TvIvView extends View {    public TvIvView(Context context) {        super(context);    }    public TvIvView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        Paint p = new Paint();        p.setColor(Color.RED);        //文本        canvas.drawText("自定义文本", 250, 330, p);        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);        //图片        canvas.drawBitmap(bitmap, 250, 360, p);    }}

这里写图片描述

原创粉丝点击