想看下曲线的使用方法,先上网搜索了一下,按照步骤完成然后在本地无法运行起来,经过修改可以运行了。
先上效果图:
接着上代码, 请往下看.
1.MainActivity.java
package com.chart.activity; import com.chart.view.LineChartView; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { LineChartView lineChartView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lineChartView = (LineChartView) findViewById(R.id.chart_line); String[] xLables = new String[] { "1月", "2月", "3月", "4月", "5月", "6月", "7月" }; String[] yLabels = new String[] { "", "100", "200", "350", "400", "500" }; String[] allData = new String[] { "50", "80", "220", "400", "190", "90", "98" }; String title = "运动曲线图 by吴宗坡 QQ:75896091"; lineChartView.SetInfo(xLables, yLabels, allData, title); } }
2.LineChartView.java
package com.chart.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; public class LineChartView extends View { public int XPoint = 40; // 原点的X坐标 public int YPoint = 260; // 原点的Y坐标 public int XScale = 55; // X的刻度长度 public int YScale = 40; // Y的刻度长度 public int XLength = 380; // X轴的长度 public int YLength = 240; // Y轴的长度 public String[] XLabel; // X的刻度 public String[] YLabel; // Y的刻度 public String[] Data; // 数据 public String Title; // 显示的标题 public LineChartView(Context context) { super(context); initViewData(); } public LineChartView(Context context,AttributeSet attributeSet) { super(context,attributeSet); initViewData(); } private void initViewData(){ String[] xLables = new String[] { "1月", "2月", "3月", "4月", "5月", "6月", "7月" }; String[] yLabels = new String[] { "", "100", "200", "350", "400", "500" }; String[] allData = new String[] { "50", "80", "220", "400", "190", "90", "98" }; String title = "曲线图 by QQ:75896091"; SetInfo(xLables, yLabels, allData, title); } public void SetInfo(String[] XLabels, String[] YLabels, String[] AllData, String strTitle) { XLabel = XLabels; YLabel = YLabels; Data = AllData; Title = strTitle; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas);// 重写onDraw方法 // canvas.drawColor(Color.WHITE);//设置背景颜色 Paint paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setAntiAlias(true);// 去锯齿 paint.setColor(Color.BLUE);// 颜色 Paint paint1 = new Paint(); paint1.setStyle(Paint.Style.STROKE); paint1.setAntiAlias(true);// 去锯齿 paint1.setColor(Color.DKGRAY); paint.setTextSize(12); // 设置轴文字大小 // 设置Y轴 canvas.drawLine(XPoint, YPoint - YLength, XPoint, YPoint, paint); // 轴线 for (int i = 0; i * YScale < YLength; i++) { canvas.drawLine(XPoint, YPoint - i * YScale, XPoint + 5, YPoint - i * YScale, paint); // 刻度 try { canvas.drawText(YLabel[i], XPoint - 22, YPoint - i * YScale + 5, paint); // 文字 } catch (Exception e) { } } canvas.drawLine(XPoint, YPoint - YLength, XPoint - 3, YPoint - YLength + 6, paint); // 箭头 canvas.drawLine(XPoint, YPoint - YLength, XPoint + 3, YPoint - YLength + 6, paint); // 设置X轴 canvas.drawLine(XPoint, YPoint, XPoint + XLength, YPoint, paint); // 轴线 for (int i = 0; i * XScale < XLength; i++) { canvas.drawLine(XPoint + i * XScale, YPoint, XPoint + i * XScale, YPoint - 5, paint); // 刻度 try { canvas.drawText(XLabel[i], XPoint + i * XScale - 10, YPoint + 20, paint); // 文字 // 数据值 if (i > 0 && YCoord(Data[i - 1]) != -999 && YCoord(Data[i]) != -999) // 保证有效数据 canvas.drawLine(XPoint + (i - 1) * XScale, YCoord(Data[i - 1]), XPoint + i * XScale, YCoord(Data[i]), paint); canvas.drawCircle(XPoint + i * XScale, YCoord(Data[i]), 2, paint); } catch (Exception e) { } } canvas.drawLine(XPoint + XLength, YPoint, XPoint + XLength - 6, YPoint - 3, paint); // 箭头 canvas.drawLine(XPoint + XLength, YPoint, XPoint + XLength - 6, YPoint + 3, paint); paint.setTextSize(16); canvas.drawText(Title, 150, 50, paint); } private int YCoord(String y0) // 计算绘制时的Y坐标,无数据时返回-999 { int y; try { y = Integer.parseInt(y0); } catch (Exception e) { return -999; // 出错则返回-999 } try { return YPoint - y * YScale / Integer.parseInt(YLabel[1]); } catch (Exception e) { } return y; } }
3. mian.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <com.chart.view.LineChartView android:id="@+id/chart_line" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
DEMO源码下载地址:
http://download.csdn.net/detail/wuzongpo/9205121