DrawChartWithPaint(自定义View)

/**
@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: 

*/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值