基本布局
这篇简单介绍下如何利用Android API进行一些简单图形的绘制,绘图的前提是需要继承自View,然后重写它的 onDraw(Canvas canvas) 方法即可。
首先我们新建一个类继承自View,并重写onDraw方法:
public class CustomView extends View { public CustomView(Context context) { super(context); } public CustomView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } }
然后在Layout中进行添加此View:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.snow.viewfirst.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <com.snow.viewfirst.CustomView android:layout_width="match_parent" android:layout_height="match_parent"> </com.snow.viewfirst.CustomView> </RelativeLayout>
这样一个大体的自定义View的流程就搭建起来了,当然现在运行会显示一片空白,因为我们还没在onDraw方法进行任何的绘制,进行绘制前需要了解两个API:Canvas 和 Paint
Canvas与Paint
Canvas翻译成中文就是画布的意思,Canvas负责进行绘制各种各样的图形,它有如下的一些绘制图形方法:
drawArc 绘制弧
drawBitmap 绘制位图
drawCircle 绘制圆形
drawLine 绘制线
drawOval 绘制椭圆
drawPath 绘制路径
drawPoint 绘制一个点
drawPoints 绘制多个点
drawRect 绘制矩形
drawRoundRect 绘制圆角矩形
drawText 绘制字符串
drawTextOnPath 沿着路径绘制字符串
更多的绘制方法参考:
https://developer.android.com/reference/android/graphics/Canvas.html
Paint翻译成中文有油漆涂料的意思,Paint主要负责设置绘图的风格,包括画笔的颜色,粗细,填充风格等,它有如下的一些设置方法:
setARGB/setColor 设置颜色
setAlpha 设置透明度
setAntiAlias 设置是否抗锯齿
setShader 设置画笔的填充效果
setShadowLayer 设置阴影
setStyle 设置画笔风格
setStrokeWidth 设置空心边框的宽度
setTextSize 设置绘制文本时文字的大小
更多的设置方法参考:
https://developer.android.com/reference/android/graphics/Paint.html
下面我们利用上面的API进行一些简单的绘图。
圆形
绘制圆形:drawCircle(float cx, float cy, float radius, Paint paint)
cx: 圆心的x坐标
cy: 圆心的y坐标
radius: 圆的半径
paint: 绘制风格
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); //去锯齿 paint.setAntiAlias(true); paint.setColor(getResources().getColor(android.R.color.holo_blue_bright)); //绘制普通圆 canvas.drawCircle(200,200,100,paint); //设置空心Style paint.setStyle(Paint.Style.STROKE); //设置空心边框的宽度 paint.setStrokeWidth(20); //绘制空心圆 canvas.drawCircle(200,500,90,paint); }
运行效果
矩形
绘制矩形:drawRect(float left, float top, float right, float bottom, Paint paint)
/ drawRect(RectF rect, Paint paint)
left: 矩形left的x坐标
top: 矩形top的y坐标
right: 矩形right的x坐标
bottom: 矩形bottom的y坐标
paint: 绘制风格
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); //去锯齿 paint.setAntiAlias(true); //设置颜色 paint.setColor(getResources().getColor(android.R.color.holo_blue_light)); //绘制正方形 canvas.drawRect(100, 100, 300, 300, paint);; //设置空心Style paint.setStyle(Paint.Style.STROKE); //设置空心边框的宽度 paint.setStrokeWidth(20); //绘制空心矩形 canvas.drawRect(100, 400, 600, 800, paint); }
后续还有椭圆、圆角矩形,方法类似就没有调试了。
本文转载:http://blog.csdn.net/leejizhou/article/details/51524948#rd