/**
@function 整理代码
@time 2014-12-31 13:37
@author JRwestbrook
@QQ 990021331
*/
用paint画统计图,即先自定义View继承View
package com.example.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
public class MyView extends View {
public MyView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
}
private Paint mPaint;//初始化画笔
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
mPaint = new Paint();
mPaint.setColor(0xFF000000);//画笔颜色
mPaint.setTextSize(15);//字体大小
// 绘制标题
canvas.drawText("testChart", 20, 20, mPaint);
// 绘制坐标轴
canvas.drawLine(50, 100, 50, 500, mPaint);// 纵坐标
canvas.drawLine(50, 500, 400, 500, mPaint);// 横坐标
// 绘制纵坐标刻度
int[] array1 = { 0, 50, 100, 150, 200, 250, 300, 350, 400 };
mPaint.setTextSize(10);
canvas.drawText("calorie", 20, 90, mPaint);
for (int i = 0; i < array1.length; i++) {
canvas.drawLine(50, 500 - array1[i], 54, 500 - array1[i], mPaint);
canvas.drawText(array1[i] + "", 20, 500 - array1[i], mPaint);
}
// 横坐标
String[] array2 = { "Mon.", "Tue.", "Wed.", "Thurs.", "Fri.", "Set.", "Sun." };
canvas.drawText("date", 410, 520, mPaint);
for (int i = 0; i < array2.length; i++) {
canvas.drawText(array2[i], array1[i] + 80, 520, mPaint);
}
// 绘制条形图
mPaint.setColor(0xec0cbfff);
mPaint.setStyle(Style.FILL);// 设置填充
canvas.drawRect(new Rect(80, 500 - 56, 110, 500), mPaint);// 前两个参数左上角坐标后两个参数右下角坐标
canvas.drawRect(130, 500 - 200, 160, 500, mPaint);// 500- 输入额参数
canvas.drawRect(new Rect(180, 500 - 250, 210, 500), mPaint);
canvas.drawText("56", 80, 500 - 58, mPaint);// 条形图上面的数字说明
canvas.drawText("200", 130, 298, mPaint);
canvas.drawText("250", 180, 248, mPaint);
}
}
以上为条形统计图
“折现”与"贝塞尔":
mPaint.setColor(0xec00ff66);
canvas.drawLine(230, 500 - 266, 260, 500 - 400, mPaint);// 折线图可以有
mPaint.reset();// 贝塞尔曲线
mPaint.setColor(0xff5a5a5a);
mPaint.setStyle(Style.STROKE);
Path path = new Path();
path.moveTo(290, 500 - 56);// 起点
path.quadTo((130 + 290) / 2 + 10, (500 - 56 + 300) / 2 + 10, 320, 300);
canvas.drawPath(path, mPaint);
activity_main.xml
<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" tools:context="com.example.testdrawchart.MainActivity">
<com.example.view.MyView android:id="@+id/myView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/textView1" android:layout_centerHorizontal="true" android:background="@drawable/background1" />
</RelativeLayout
/**
@comment:
*/