自定义View基础入门

来源:互联网 发布:json字符串base64编码 编辑:程序博客网 时间:2024/06/15 00:43

工作中很多时候会用到自定义View,刚开始接触可能会感觉到头痛,但是很多时候在所难免,所以积累点相关知识很重要,下面就从基础开始做起

参考泡网上的栗子:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html 点击打开链接


1、创建一个类继承View,并在构造方法里创建画笔,准备做点事情

 public class CanvasTest extends View {        private Paint mPaint;        public CanvasTest(Context context) {            super(context);            //创建画笔            mPaint = new Paint();            mPaint.setColor(Color.BLUE);            mPaint.setStrokeWidth(5);            mPaint.setAntiAlias(true);            mPaint.setStrokeJoin(Paint.Join.ROUND);        }
2、重写onDraw()方法,直接调用canvas对象进行绘制

   绘制圆形drawCircle

   //绘制圆形            canvas.drawCircle(100,100,100,mPaint);

 绘制弧形

//绘制弧形区域            RectF rect = new RectF(100, 100, 200, 200);            canvas.drawArc(rect,  //弧形所使用的矩形区域                    0,            //开始的角度                    90,           //扫过的角度                    true,        //是否使用中心,使用中心的话会围绕一个圆心进行绘制,否则,不会                    mPaint);     //画笔

 绘制线、颜色、路径文字

  //绘制颜色            canvas.drawColor(Color.BLUE);            //划线            canvas.drawLine(150, 150, 500, 500, mPaint);            //绘制椭圆            canvas.drawOval(rect,mPaint);            //绘制文字            canvas.drawPosText("HelloWorld",new float[]{                    100,150,                    110,160,                    120,170,                    130,180,                    140,190,                    150,200,                    160,210,                    170,220,                    180,210,                    190,220},mPaint            );

绘制矩形、折线

            //绘制圆角矩形            canvas.drawRoundRect(rect,                    20,//x轴半径                    20, //y轴半径                    mPaint);            //绘制矩形            Rect mRect=new Rect(300,300,500,500);            canvas.drawRect(mRect,mPaint);            //绘制折线 path            Path mPath=new Path();            mPath.moveTo(500,500);            mPath.lineTo(600,600);            mPath.lineTo(600,200);            mPath.lineTo(500,300);            canvas.drawPath(mPath,mPaint);

绘制一个钟表图案

 mPaint.setAntiAlias(true);//抗锯齿            mPaint.setStyle(Paint.Style.STROKE);            canvas.translate(canvas.getWidth()/2, 200); //将位置移动画布的坐标点:150,150            canvas.drawCircle(0, 0, 100, mPaint); //画圆            //使用path绘制路径文字            canvas.save();            canvas.translate(-75, -75);            Path path = new Path();            path.addArc(new RectF(0,0,150,150), 150, -150);            //文字画笔            Paint textPaint = new Paint(mPaint);            textPaint.setTextSize(14);            textPaint.setStrokeWidth(1);            canvas.drawTextOnPath("TISSION TIME ", path, 28, 0, textPaint);            canvas.restore();            Paint tmpPaint = new Paint(mPaint); //小刻度画笔对象            tmpPaint.setStrokeWidth(1);            float  y=100;            int count = 60; //总刻度数            for(int i=0 ; i <count ; i++){                if(i%5 == 0){                    //绘制大刻度                    canvas.drawLine(0f, y, 0, y+12f, mPaint);                    //绘制文字                    canvas.drawText(String.valueOf(i/5), -4f, -y-20f, tmpPaint);                }else{                    //绘制小刻度                    canvas.drawLine(0f, y, 0f, y +5f, tmpPaint);                }                canvas.rotate(360/count,0f,0f); //旋转画布            }            //绘制指针            tmpPaint.setColor(Color.GRAY);            tmpPaint.setStrokeWidth(4);            canvas.drawCircle(0, 0, 7, tmpPaint);            tmpPaint.setStyle(Paint.Style.FILL);            tmpPaint.setColor(Color.YELLOW);            canvas.drawCircle(0, 0, 5, tmpPaint);            canvas.drawLine(0, 10, 0, -65, mPaint);        }