android自定义view--Paint和Canvas

demo主要简单了解下自定义view在onDraw()对视图进行绘制的一些简单操作

如果英语很6可以直接看官方文档:

Canvas官网地址    Paint官网地址

要绘制图形,首先得调整画笔(Paint),按照自己的需求设置画笔的相关属性,常用的一些设置有:

 

         1、setAntiAlias():设置画笔的锯齿效果
         2、setDither():设置防抖动
         3、setColor():设置画笔的颜色
         4、setARGB():设置画笔的A、R、G、B值
         5、setAlpha():设置画笔的Alpha值
         6、setStyle():设置画笔的风格(空心或实心)(FILL:填充 FILL_AND_STROKE:填充加描边 STROKE:描边 )
         7、setStrokeWidth():设置空心边框的宽度
         8、setTextSize():设置字体的尺寸
         9、getColor():获取画笔的颜色

 

 

画笔准备好之后想要绘制各种图案需要实用画布(Canvas,只能用ondraw方法中的canvas,如果自定义或者new出来的canvas无法连接到view的绘制内存中),方法很多,常用的有以下几种:

 

         1、绘制矩形:canvas.drawRect();
         2、Path绘制:canvas.drawPath();
         3、绘制文字:canvas.drawText();
         4、绘制直线:canvas.drawLine();
         5、绘制圆形:canvas.drawCircle();
         6、绘制圆弧:canvas.drawArc();
         7、绘制图片:canvas.drawBitmap();

 

矩形绘制 (三个方法) +  圆角矩形绘制 (一个方法)

 

        /**
         * 绘制矩形
         *
         * 第一,第二个参数:矩形左上角的XY坐标
         * 第三,第四个参数:矩形右下角的XY坐标
         * 参数五:绘制时实用的画笔
         */
        canvas.drawRect(
                110, 110,
                300, 300,
                mPaint
        );

        /**
         * rect和rectF的区别和方法
         * 区别:精度不一样。Rect是使用int类型作为数值,RectF是使用float类型作为数值。
         * 常用方法:
         *      equals()比较两个矩形的坐标是否一样、
         *      isEmpty()判断矩形是否为空、
         *      width()获取矩形的宽、
         *      height()获取矩形的高、
         *      centerX()获取矩形水平中心点坐标、
         *      centerY()获取矩形垂直中心点坐标等等
         */
        Rect rect = new Rect(310, 310, 500, 500);
        canvas.drawRect(rect, mPaint);

        RectF rectF = new RectF(510, 510, 700, 700);
        canvas.drawRect(rectF, mPaint);

        /**
         * 第一个参数:RectF对象
         * 第二个参数:x方向的圆角半径
         * 第三个参数:y方向的圆角半径
         * 第四个参数:画笔
         */
        canvas.drawRoundRect(
                new RectF(710, 710, 900, 900),
                20,
                20,
                mPaint
        );

 

 



Path绘制非常强大,这里只是简单介绍,在后面实例中也会用到,可以单独搞一篇博客写Path

 

        Path path = new Path();
        //将起始轮廓点移至x,y坐标点,默认情况为0,0点
        path.moveTo(10,10);
        //绘制一条直线
        path.lineTo(200,10);
        path.lineTo(200,200);
        //回到初始点形成封闭的曲线
        path.close();
        canvas.drawPath(path,mPaint);


 

 

 

想要实用文字绘制必须先要了解文字的基线:

 

        String str = "xjghyzab";
        mPaint.setTextAlign(Paint.Align.CENTER);
        /**
         * 想要把文字画到Canvas上必须要确定这段文字的范围
         * 测量所绘制的最小矩形范围(这个不会考虑基线底线,只会测量当前文字最小矩形)
         */
        Rect rect = new Rect();
        mPaint.getTextBounds(str, 0, str.length(), rect);
        /**
         * 第一个参数:文本
         * 第二个参数:X 默认文字起源坐标,如果设置了paint.setTextAlign(Paint.Align.CENTER)就是文字中心坐标
         * 第三个参数:Y 文字基线坐标
         */
        canvas.drawText(str, getMeasuredWidth() / 2, 300, mPaint);


 

 

 

 

        /**
         * 绘制直线(两点确定一线)
         *
         * 一二参数:起点
         * 三四参数:终点
         * 最后一个参数:绘制直线所使用的画笔
         */
        canvas.drawLine(
                50, 50,
                getWidth() - 50, 50,
                mPaint);


 

 

 

 

        /**
         * 绘制圆形(圆必须要确定圆心和半径)
         *
         * 第一二个参数:圆心的XY坐标
         * 第二个参数:圆的半径
         * 第三个参数:绘制圆所实用的画笔
         */
        canvas.drawCircle(
                110, 150,
                60,
                mPaint);


 

 

 

这里为了效果画了两个矩形边框,真是效果是没有边框的

 

        RectF rectF = new RectF(100, 0, 600, 500);
        /**
         * 第一个参数:指定圆弧的外轮廓矩形区域
         * 第二个三个参数:圆弧其实角度,顺时针方向
         * 第四个参数:如果为True时,在绘制圆弧时将圆心包括在内(上图为false下图为true)
         * 第五个参数:绘制圆弧的画笔
         */
        canvas.drawArc(
                rectF,
                0, 150,
                false,
                mPaint
        );

        RectF rectF1 = new RectF(100,500 , 600, 1000);
        canvas.drawArc(
                rectF1,
                0, 150,
                true,
                mPaint
        );


 

 

 

图片绘制一般使用两个方法:

 

        bitmap = ((BitmapDrawable) mResources.getDrawable(R.drawable.aa)).getBitmap();
        /**
         * Bitmap bitmap:要绘制的对象
         * float left:图片左边偏移量
         * float top:图片上边偏移量
         * Paint paint:绘制使用的画笔
         */
        canvas.drawBitmap(
                bitmap,
                0,
                0,
                mPaint
        );

        //裁剪左上四分之一
        Rect mSrcRect = new Rect(0, 0, bitmap.getWidth()/2, bitmap.getHeight()/2);
        //显示在第一张图片下面
        Rect mDestRect = new Rect(0, bitmap.getHeight()+10, bitmap.getWidth(), bitmap.getHeight()*2+10);
        /**
         * Bitmap bitmap:要绘制的对象
         * Rect src:对图片进行裁截,若是空null则显示整个图片
         * RectF dst:图片在Canvas画布中显示的区域
         * Paint paint:绘制使用的画笔
         */
        canvas.drawBitmap(
                bitmap,
                mSrcRect,
                mDestRect,
                mPaint
        );

 

 

 

点击打开链接免费下载源码

 

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值