Android——自定义组件和游戏开发(一)绘图工具类Canvas,Paint,Path。
简介
Canvas是画布,必须基于View的onDraw使用。
用View来实现Canvas画布,在LinearLayout里加入View即可
类
Canvas:画布,用于绘制图形
构造方法:
Canvas(Bitmap):
在Bitmap上绘制图形。
方法:
void drawRect(float left, float top, float right, float bottom, Paint paint)
参数:
left:矩形左边x坐标
top:矩形顶部y坐标
right:矩形右边x坐标
bottom:矩形底部y坐标
paint:画笔
返回值:无
返回值意义:无
作用:根据left,top,right,bottom坐标和paint画笔样式设置,绘制矩形。
void drawOval(float left,float top,float right,float bottom,Paint paint)
参数:
left:圆形左边x坐标
top:圆形顶部y坐标
right:圆形右边x坐标
bottom:圆形底部y坐标
paint:画笔
返回值:无
返回值意义:无
作用:根据left,top,right,bottom坐标和paint画笔样式设置,绘制圆形。
void drawRoundRect(float left , float top , float right , float bottom , float rx , float ry , Paint paint)
参数:
left:圆角矩形左边x坐标
top:圆角矩形顶部y坐标
right:圆角矩形右边x坐标
bottom:圆角矩形底部y坐标
rx:圆角矩形的圆角rx长度
ry:圆角矩形的圆角ry长度
返回值:无
返回值意义:无
作用:根据left,top,right,bottom坐标和圆角的rx,ry半径和paint画笔。绘制圆角矩形。
void drawBitMap(Bitmap bitmap , Rect srcRect , Rect dstRect ,Paint paint)
参数
Bitmap:图片的位图
srcRect:原图片的剪切矩形
dstRect:现图片的位置矩形
paint:画笔,花图片不需要,传null即可
返回值:无
返回值意义:无
作用:根据bitmap绘制图片,注意不需要paint。图片的压缩在matrix里使用
void drawPath(Path path , Paint paint)
参数:
path:路径对象
paint:画笔
返回值:无
返回值意义:无
作用:用path设定最后一个点和上一个点的坐标进行绘制图形
int saveLayer(RectF bounds, Paint paint, int saveFlags)
参数:
bounds:要保存的矩形四边坐标
paint:画笔
saveFlags:Canvas.xxxxxFlag
返回值:int
返回值意义:第几次保存的数
作用:
保存当前矩阵并将其剪辑到私有堆栈上。
随后对平移、缩放、旋转、倾斜、concat或clipRect、clipPath的调用都将照常运行,但当对restore()进行平衡调用时,这些调用将被忘记,而save()之前存在的设置将被恢复。
save方法用于临时保存画布坐标系统的状态
restore方法可以用来恢复save之后设置的状态,
void restoreToCount( int count )
参数:
count : 要恢复的矩形参数
返回值:void
返回值意义:void
作用:恢复之前设置的坐标
(主要是自定义组件的时候使用)
类:
Paint:画笔,设置绘画样式。如颜色,粗细,看据此。
方法
void setColor(Color color)
参数:
color:颜色对象
返回值:void
返回值意义:无
作用:设置画笔颜色
void setStrokeWidth( int strokeWidth )
参数:
strokeWidth:画笔粗细
返回值:void
返回值意义:无
作用:设置画笔粗细
void setAntiAlias(boolean isAntiAlias)
参数:
antialias:是否开启抗锯齿
返回值:void
返回值意义:无
作用:开启抗锯齿
void setStyle(int Style)
参数:
style:选值。Paint.Style.Fill,Paint.style.STROKE.
返回值:无
返回值意义:无
作用:选择画笔的风格:填充,描边
字体的可选风格
四个整型常量:
- BOLD:加粗
- ITALIC:斜体
- BOLD_ITALIC:粗斜体
- NORMAL:正常
paint.setTypeface(Typeface.DEFAULT_BOLD);
类
Path:路径对象,设置第一个点(moveTo(ifloat x , float y))和下一个点(lineTo(float x , flaot y ))
方法:
void moveTo(float x , float y)
参数:
x:点的x坐标
y:点的y坐标
返回值:无
返回值意义:无
作用:移动Path到第一个点
void lineTo(float x , float y)
参数:
x:点的x坐标
y:点的y坐标
返回值:无
返回值意义:无
作用:移动Path到下一个点。
使用:
// 用Canvas ,Paint,Path:制作个人绘画板 public class MyPaint07 extends View { private Paint paint; private Path path; public MyPaint07(Context context) { super(context); init(); } public MyPaint07(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } public MyPaint07(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public MyPaint07(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(); } public void init(){ paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.parseColor("#00ff00")); paint.setStrokeWidth(10); path = new Path(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawPath(path,paint); } @Override public boolean onTouchEvent(MotionEvent event) { switch ( event.getAction() ){ case MotionEvent.ACTION_DOWN: Log.i(TAG, "onTouchEvent: do it"); path.moveTo(event.getX(),event.getY()); break; case MotionEvent.ACTION_MOVE: path.lineTo(event.getX(),event.getY()); break; } invalidate(); return true; } private static final String TAG = "MyPaint07"; }