自定义View基础入门

工作中很多时候会用到自定义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);


        }


  





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值