做android的朋友平时肯定会用到好多的图形,对于这些图形我们通常三种方式就可以解决。一、美工妹妹帮我们切图;二、shape可以解决;三、paint直接来绘图。
前面两种方法我就不介绍了,已经在我的博客中写过。
举个场景的例子,就给你一组数据,绘制一张折线图。
这里面可以借助第三方的类库来完成,当然对于一些公司来讲,很反感使用第三方的类库,所以你不得不使用其他的方法了。
在绘制过程中,最重要的就是,设置paint(画笔),canvas(画布)。
自定义一个类继承View这个基类,重写它的onDraw()这个方法。
public class LineView extends View {
public LineView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//获取屏幕宽度
WindowManager wm = (WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
canvas.drawColor(Color.WHITE);
// PathEffect ps = new CornerPathEffect(10);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);
// paint.setPathEffect(ps);
Path path = new Path();
path.moveTo(0,0);
Paint paint1 = new Paint();
paint1.setColor(Color.RED);
paint1.setStyle(Paint.Style.STROKE);
paint1.setStrokeWidth(10);
Paint paint2 = new Paint();
paint2.setColor(Color.BLUE);
paint2.setStyle(Paint.Style.STROKE);
paint2.setStrokeWidth(1);
for(int i = 1 ;i<width/20+1;i++){
//每隔20dp,随机生成一个坐标
float x = 20*i;
float y = (float)Math.random()*200;
canvas.drawText("("+(int)x+","+(int)y+")",x,y,paint2);
canvas.drawCircle(20*i,y,3,paint1);
path.lineTo(20*i,y);
}
//绘制路径
canvas.drawPath(path,paint);
}
}
绘制一个圆角的四分之一圆,并在其中绘制几个字
和上面一样的方法,重写Ondraw()方法。
public class LineView extends View {
public LineView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
Paint paintPath=new Paint();
Paint paintText=new Paint();
paintPath.setColor(Color.RED); //路径的画刷为红色
paintText.setColor(Color.WHITE); //路径上的文字为白色
Path pathCWJ=new Path();
pathCWJ.addCircle(10,10,80, Path.Direction.CW); // 半径为50px,绘制的方向CW为顺时针
canvas.drawPath(pathCWJ,paintPath);
canvas.drawTextOnPath("东方红",pathCWJ,35,15,paintText); //在路径上绘制文字
}
}