android直方图

Chart.java

package com.example.barchart;

import android.graphics.Canvas ;
import android.graphics.Paint ;

public class Chart {

	private final int w = 20 ;
	private int h ;
	private final int total_y = 300 ;
	private int x ;

	public int getX() {
		return x ;
	}

	public void setX(int x) {
		this.x = x ;
	}

	public int getH() {
		return h ;
	}

	public void setH(int h) {
		this.h = h ;
	}

	public void drawSelf(Canvas canvas, Paint paint) {
		canvas.drawRect(x, total_y - h, w + x, total_y - 1, paint) ;
	}

}

ChartView.java

package com.example.barchart;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.PathEffect;
import android.view.View;

public class ChartView extends View {

	private int[] data_total ;
	private int margin ;

	private Chart chart ;
	private Paint paint ;	

	public ChartView(Context context, int flag) {
		super(context) ;

		margin = 0 ;
		chart = new Chart() ;
		data_total = new int[] {90,65,80,115,11,11,10,12,17,18,19,14,15,16,17,24,25,28,26,28} ;

		paint = new Paint() ;
		paint.setAntiAlias(true) ;
	}

	public void drawAxis(Canvas canvas) {
		//x,y 轴
		paint.setColor(Color.YELLOW) ;
		paint.setStrokeWidth(2) ;
		//x轴线
		canvas.drawLine(30, 300, 550, 300, paint) ;
		//y轴线
		canvas.drawLine(30, 20, 30, 300, paint) ;	
		
	//	x,y轴上的刻度
		int x = 43;//x轴上文字起始位置=图的起始位置+图的宽度/2
		int y = 250 ;

		for (int i = 0; i < data_total.length; i++) {
			canvas.drawText(i + 1 + "", x, 320, paint) ;
			x += 25 ;
		}
		canvas.drawText(10 + "", 0, 290, paint) ;
		for (int i = 0; i < 5; i++) {
			canvas.drawText(50 * (i + 1) + "", 0, y, paint) ;
			y -= 50 ;
		}
	}

	public void drawChart(Canvas canvas) {			
//			int temp = 40 ;
			int temp = 15 ;
			for (int i = 0; i < data_total.length; i++) {			
				chart.setH(data_total[i]) ;
				//20为图的宽度
				chart.setX(temp + 20 + margin) ;
//				chart.setX(temp + margin) ;
				if(i%2!=0){
					paint.setColor(Color.GREEN) ;
				}else{
					paint.setColor(Color.BLUE) ;
				}
				chart.drawSelf(canvas, paint) ;
				margin = 5 ;//图与图之间的距离
				temp = chart.getX() ;
				System.out.println("temp:"+temp);
			}
	}
	
	public void drawline(Canvas canvas){
		//虚线
//			Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
//			paint.setStyle(Style.STROKE);
			paint.setColor(Color.WHITE);
			paint.setStrokeWidth(1);
			PathEffect effects = new DashPathEffect(new float[] { 5, 5, 5, 5}, 1);
			paint.setPathEffect(effects);
			canvas.drawLine(30, 290, 550, 290, paint);
			int y = 250;
			for (int i = 0; i < 5; i++) {				
				canvas.drawLine(30, y, 550, y, paint);
				y -= 50 ;
			}
	}

	@Override
	public void onDraw(Canvas canvas) {
		canvas.drawColor(Color.BLACK) ;
//		canvas.drawColor(R.color.ball_white) ;
		drawAxis(canvas) ;
		drawChart(canvas) ;
		drawline(canvas);
	}
}

MainActivity.java

package com.example.barchart;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

	private static final int TOTALCHART = 2 ;

	private LinearLayout layout_chart ;
	private Button btn_total ;
	private TextView txv_screen ;
	private TextView txv_power ;

	private ChartView chartView ;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE) ;
        setContentView(R.layout.activity_main);
        
        layout_chart = (LinearLayout) findViewById(R.id.chartArea) ;

		btn_total = (Button) findViewById(R.id.totalChart) ;
		txv_screen = (TextView) findViewById(R.id.screenDesc) ;
		txv_power = (TextView) findViewById(R.id.powerDesc) ;


		btn_total.setOnClickListener(this) ;
    }
    
    @Override
	public void onClick(View v) {		
		int which = 0 ;

			which = TOTALCHART ;
			txv_power.setVisibility(View.INVISIBLE) ;
			txv_screen.setText("绿色: 总功耗") ;

		chartView = new ChartView(this, which) ;
		layout_chart.removeAllViews() ;
		layout_chart.addView(chartView) ;
	}

	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK)
			System.exit(0) ;
		return true ;
	}
    
}

源码下载:http://download.csdn.net/detail/clpliji/4581896
 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值