android自定义view--Paint和Canvas

来源:互联网 发布:淘宝推广收费标准 编辑:程序博客网 时间:2024/06/05 19:40


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),方法很多,常用的有以下几种:

         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        );


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


原创粉丝点击