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.youkuaiyun.com/detail/clpliji/4581896