Android自定义View-关于Graphics的解释(一)

1、Paint类对应的方法

1.1 图形绘制相关方法

方法定义说明备注
public void set(Paint src) 根据已有画笔的属性进行赋值 
public void setColor(int color) 设置颜色 
public void setAlpha(int alpha)设置透明度,alpha为透明度,取值范围为0~255,数值越小越透明 
public void setARGB(int a, int r, int g, int b) 设置透明度和颜色,a代表透明度,r,g,b代表颜色值 
public void setAntiAlias(boolean aa) 

设置是否使用抗锯齿功能,比较耗资源,减慢绘制速度

 

详细的解释见3.1
public void setDither(boolean dither) 

设定是否使用图像抖动,如true,绘制出来的图片颜色更饱满、清晰  

 

详细的解释见3.2
public void setStyle(android.graphics._Original_Paint.Style style) 

设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE  

说明:当我们在调用drawCircle、drawOval、drawArc、drawRect等方法时,我们既可以绘制对应图形的填充面,也可以只绘制该图形的轮廓线,控制的关键在于画笔Paint中的style。Paint通过setStyle方法设置要绘制的类型,style有取三种值:Paint.Style.FILL、Paint.Style.STROKE和Paint.Style.FILL_AND_STROKE。

当style为FILL时,绘制是填充面,FILL是Paint默认的style;

当style为STROKE时,绘制的是图形的轮廓线;

当style为FILL_AND_STROKE时,同时绘制填充面和轮廓线,不过这种情况用的不多,因为填充面和轮廓线是用同一种颜色绘制的,区分不出轮廓线的效果。

public void setStrokeCap(Cap cap) 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式  Cap.ROUND,或方形样式Cap.SQUARE   
public void setStrokeWidth(float width) 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度       

1.2 文字绘制相关方法

方法说明备注
public void setTextSize(float textSize)设置文字大小 
public void setTextScaleX(float scaleX)设置文字x轴的缩放比例,可以实现文字的拉伸效果   
public void setTextSkewX(float skewX)设置文字倾斜弧度  
public void setUnderlineText(boolean flag)设置文字下划线效果     
public void setStrikeThruText(boolean flag)设置删除线效果 
public Typeface setTypeface(Typeface typeface)设置字体风格    

接收参数为 Typeface对象,在Typeface.java类中,比较简单的,有defaultFromStyle方法返回Typeface对象

代码:paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));    

public void setTextAlign(android.graphics._Original_Paint.Align align)设置文字的对齐方向  可选LEFT、CENTER和RIGHT。


2、Canvas类对应的方法

2.1  总的说明

 这个类相当于一个画布,你可以在里面画很多东西;

我们可以把这个Canvas理解成系统提供给我们的一块内存区域(但实际上它只是一套画图的API,真正的内存是下面的Bitmap),而且它还提供了一整套对这个内存区域进行操作的方法,所有的这些操作都是画图API。也就是说在这种方式下我们已经能一笔一划或者使用Graphic来画我们所需要的东西了,要画什么要显示什么都由我们自己控制。

这种方式根据环境还分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。两种的主要是区别就是可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。前面一种适合处理量比较小,帧率比较小的动画,比如说象棋游戏之类的;而后一种主要用在游戏,高品质动画方面的画图。

2.2 draw方法的解释

方法说明代码例子
设置ARGB、颜色填充画布public void drawARGB(int a, int r, int g, int b) {}  
public void drawColor(int color) {}  
public void drawRGB(int r, int g, int b) {} 
canvas.drawARGB(50, 255, 0, 0);//参数即为ARGB的值 
画点public native void drawPoint(float x, float y, Paint paint);  //参数比较明显,就是点的坐标,需要注意的是,在绘制点之前,需要设置画笔的宽度,否则不能画出来  
  paint.setStrokeWidth(13);     
  //另外,还可以设置画笔的样式,来指定所画的点的样式,圆形还是方形  
  paint.setStrokeCap(Paint.Cap.ROUND);//或者paint.setStrokeCap(Paint.Cap.BUTT);  
  canvas.drawPoint(100, 100, paint); 
画直线public void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) {}  canvas.drawLine(100, 100, 500, 500, paint);//参数为起点和终点的XY坐标 
画圆public void drawCircle(float cx, float cy, float radius, Paint paint) {}  canvas.drawCircle(200, 200, 100, paint);//参数为圆心坐标和半径  
绘制矩形public void drawRect(float left, float top, float right, float bottom, Paint paint) {}  
public void drawRect(RectF rect, Paint paint) {}  
public void drawRect(Rect r, Paint paint) {}  
// RectF 和 Rect  都可用来定义一个矩形区域,主要区别是参数类型不同,一个是int类型,一个是float类型  
private RectF mRectF;  
mRectF = new RectF(100, 100, 200, 500);  
canvas.drawRect(mRectF, paint);  
绘制圆角矩形public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) {}  private RectF mRectF;  
mRectF = new RectF(100, 100, 500, 500);//定义一个区域  
canvas.drawRoundRect(mRectF, 20, 50, paint); //第二、三个参数分别定义x和y方向的圆角弧度
绘制一个区域的内切圆或椭圆(视所定义的矩形而定)public void drawOval(RectF oval, Paint paint) {}  private RectF mRectF;  
mRectF = new RectF(100, 100, 200, 500);  
canvas.drawOval(mRectF, paint);
绘制弧形区域public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter,Paint paint) {}private RectF mRectF;  
mRectF = new RectF(100, 100, 200, 200);//定义一个矩形区域  
canvas.drawArc(mRectF, 0, 90, false, paint);  
//第二个参数为起始弧度,第三个为终止弧度,第四个为显示方式 
绘制文本public void drawText(String text, float x, float y, Paint paint) {}  
public void drawText(char[] text, int index, int count, float x, float y, Paint paint) {}  
public void drawText(String text, int start, int end, float x, float y, Paint paint) {}  
canvas.drawText("hwgt", 100, 100, paint);  
canvas.drawText(new char [] {'h','w','g','t','3','1','3','3'}, 2, 3, 100, 100, paint);  
canvas.drawText("hwgt3133", 2, 4, 100, 100, paint); //含头不含尾 
按照指定点的坐标绘制文本public void drawPosText(String text, float[] pos, Paint paint) {}  
public void drawPosText(char[] text, int index, int count, float[] pos, Paint paint) {} 
canvas.drawPosText("hwgt", new float[]{50.0f,50.0f,100.0f,100.0f,250.0f,250.0f,500.0f,500.0f,}, paint);  
canvas.drawPosText(new char[]{'h','w','g','t'}, 3, 1, new float[]{50.0f,50.0f,100.0f,100.0f,250.0f,250.0f,500.0f,500.0f,}, paint);  
//推荐使用第二个方法,if (index < 0 || index + count > text.length || count*2 > pos.length),就会报错  
按照指定的路径绘制文本public void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) {}   


3、一些方法的重点理解

3.1 setAntiAlias(boolean)方法解释

该方法作用是抗锯齿,什么意思呢,我们看下效果图,就知道了 

Paint.setAntiAlias()的作用

左边是没有设置抗锯齿的,右边是设置了抗锯齿的,边界明显变模糊了。

3.2  setDither(boolean)方法解释

该方法是设置防抖动。 
我们先看下没有设置防抖动的绘制出来的图 

Paint.setDither()方法的作用

然后我们看下设置了防抖动的绘制出来的图 

Paint.setDither()方法的作用

第二个是不是比第一个图柔和点,这就是防抖动的效果。 

 

3.3  drawRect()方法解释

该方法是绘制矩形

new Rect(150, 75, 260, 120)  

这个构造方法需要四个参数这四个参数 指明了什么位置 ?我们就来解释怎么画 这个 矩形 
这四个 参数 分别代表的意思是:left   top   right   bottom  上下左右呗。啊,不是 是 左 上 右 下。 下面给大家解释  
left : 矩形左边的X坐标  150        ---->图片中的A点 
top:    矩形顶部的Y坐标   75         ---->图片中的B点 
right :  矩形右边的X坐标   260       ----->图片中的C点 
bottom: 矩形底部的Y坐标 120     ------->图片中的D点 
说白了就是左上角的坐标是(150,75),右下角的坐标是(260,120),这样就好理解了

3.4   drawArc方法解释

    public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

  • oval :指定圆弧的外轮廓矩形区域。
  • startAngle: 圆弧起始角度,单位为度。
  • sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度。
  • useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。
  • paint: 绘制圆弧的画板属性,如颜色,是否填充等。

关于圆弧起始角度的解释:

@Override  
protected void onDraw(Canvas canvas) {  
    super.onDraw(canvas);  
    canvas.drawArc(mRectF, 0, 90, false, mPaint);  
    mPaint.setColor(Color.RED);  
    canvas.drawArc(mRectF, 90, 90, false, mPaint);  
    mPaint.setColor(Color.YELLOW);  
    canvas.drawArc(mRectF, 180, 90, false, mPaint);  
    mPaint.setColor(Color.GRAY);  
    canvas.drawArc(mRectF, 270, 90, false, mPaint);  
    canvas.drawRect(mRectF,mPaint2);  
} 

效果如下图所示:

07183718_GydA.jpg

关于useCenter通过下面来进行描述:

183118_aeBZ_2253892.png

 

参考地址:

            http://www.cnblogs.com/hwgt/p/5416866.html

            http://blog.csdn.net/rhljiayou/article/details/7212620/

        1、android绘图Paint.setAnitAlias()和Paint.setDither()方法的作用
            http://blog.csdn.net/lovexieyuan520/article/details/50732023
        2、Android Paint setAntiAlias
            http://blog.csdn.net/shichaosong/article/details/21157751

        3、关于Rect参数解释的比较好的文章
            http://blog.csdn.net/chengyingzhilian/article/details/7452082

        4、关于drawArc方法解释参考的文章

            http://blog.sina.com.cn/s/blog_783ede0301012im3.html

            http://blog.csdn.net/senyangs/article/details/44240307

转载于:https://my.oschina.net/u/2253892/blog/916602

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值