Activity:

package com.example.zz;


import java.util.ArrayList;

import java.util.List;


import android.os.Bundle;

import android.app.Activity;

import android.graphics.Color;

import android.graphics.drawable.GradientDrawable.Orientation;

import android.util.Log;

import android.view.Menu;

import android.view.Window;

import android.view.WindowManager;

import android.widget.LinearLayout;


public class MainActivity extends Activity

{


@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);


this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);


requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

LineChar line1 = (LineChar) findViewById(R.id.lineChar1);

List<Integer> list = new ArrayList();

list.add(20);

list.add(2);

list.add(5);

list.add(1);

list.add(3);

List<Integer> list1 = new ArrayList();

list1.add(50);

list1.add(20);

list1.add(15);

list1.add(12);

list1.add(35);

List<Integer> list2 = new ArrayList();

list2.add(20);

list2.add(7);

list2.add(8);

list2.add(13);

List<List<Integer>> l = new ArrayList();

l.add(list);

l.add(list1);


l.add(list2);

line1.setList(l);


List<Integer> color = new ArrayList();

color.add(Color.RED);

color.add(Color.BLUE);

color.add(Color.GREEN);

line1.setColor(color);

LineChar line2 = (LineChar) findViewById(R.id.lineChar2);

Log.e("adnroid", "set");

List<Integer> list3 = new ArrayList();

list3.add(20);

list3.add(2);

list3.add(5);

list3.add(1);

list3.add(3);

List<Integer> list4 = new ArrayList();

list4.add(120);

list4.add(22);

list4.add(51);

list4.add(51);

list4.add(93);


List<List<Integer>> l2 = new ArrayList();

l2.add(list3);

l2.add(list4);


line2.setList(l2);


// LineChar line2 = (LineChar) findViewById(R.id.lineChar2);

// Log.e("adnroid", "set");


}


}

自定义折线图Class:

package com.example.zz;


import java.util.ArrayList;

import java.util.List;


import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.PorterDuff.Mode;

import android.util.AttributeSet;

import android.view.SurfaceHolder;

import android.view.SurfaceHolder.Callback;

import android.view.SurfaceView;


/**

* @description 多条折线 折线图

* @author 李海艺

* @date 2013.12.10

*/

public class LineChar extends SurfaceView implements Callback

{

private SurfaceHolder sfh;

private final int xSize = 24;// 将x轴分成24份

private final int ySize = 10;// 将Y轴分成10份

private float xSpace;// 两条竖线的间距

private float ySpace;// 两条横线的间距

private List<List<Integer>> list;// Y轴数据

private final int left = 20;// 距离左边的距离

private final int right = 20;// 距离右边的距离

private final int top = 20;// 距离顶部的距离

private final int bottom = 20;// 距离底部的距离

private float max;// Y轴数据的最大值

private List<Integer> color = new ArrayList();// 折线图的颜色列表


public List<Integer> getColor()

{

return color;

}


public void setColor(List<Integer> color)

{

this.color = color;

}


public List<List<Integer>> getList()

{

return list;

}


public void setList(List<List<Integer>> list)

{

this.list = list;

}


public LineChar(Context context)

{

super(context);

init();

}


public LineChar(Context context, AttributeSet attrs)

{

super(context, attrs);

init();

}


private void init()

{

sfh = this.getHolder();

sfh.addCallback(this);

}


@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height)

{


}


@Override

public void surfaceCreated(SurfaceHolder holder)

{


Canvas canvas = sfh.lockCanvas();

// 画坐标轴

drawXY(canvas);


// 画折线图

drawChar(canvas);

sfh.unlockCanvasAndPost(canvas);


}


@Override

public void surfaceDestroyed(SurfaceHolder holder)

{


}


/**

* 画坐标轴

*

* @param canvas

*/

private void drawXY(Canvas canvas)

{

canvas.drawColor(Color.WHITE);

Paint paint = new Paint();

paint.setColor(Color.BLACK);

// 画Y轴

xSpace = (getWidth() - left - right) / xSize;

for (int i = 0; i < xSize; i++)

{


canvas.drawLine(left + right + i * xSpace, top, left + right + i

* xSpace, getHeight() - bottom, paint);

}

// 画X轴文字

for (int i = 0; i < xSize; i++)

{

Paint paintText = new Paint();

paint.setColor(Color.BLACK);

paint.setTextSize(20);

canvas.drawText(i + "", left + right - 5 + i * xSpace, getHeight()

- bottom / 5, paintText);

}


// 画X轴

ySpace = (getHeight() - top - bottom) / ySize;

for (int i = 0; i <= ySize; i++)

{

canvas.drawLine(left + right, top + ySpace * i, getWidth() - left

- right, top + ySpace * i, paint);

}

for (int i = 0; i < list.size(); i++)

{

for (int j = 0; j < list.get(i).size(); j++)

{

if (list.get(i).get(j) > max)

{

max = list.get(i).get(j);

}

}


}

// 画Y轴文字

for (int i = 0; i < ySize; i++)

{

Paint paintText = new Paint();

paint.setColor(Color.BLACK);

paint.setTextSize(20);

canvas.drawText((max / 10 * (ySize - i)) + "", left / 2, top

+ ySpace * i + 5, paintText);

}

}


/**

* 画折线图

*

* @param canvas

*/

private void drawChar(Canvas canvas)

{


if (color.size() < list.size())

{

for (int i = color.size(); i < list.size(); i++)

{

int r = (int) Math.round(Math.random() * 255);

int g = (int) Math.round(Math.random() * 255);

int b = (int) Math.round(Math.random() * 255);

color.add(Color.rgb(r, g, b));

}


}

for (int i = 0; i < list.size(); i++)

{

for (int j = 0; j < list.get(i).size(); j++)

{

Paint paintCicle = new Paint();

paintCicle.setColor(color.get(i));

paintCicle.setAntiAlias(true);

canvas.drawCircle(left + right + j * xSpace,

top + (ySize - list.get(i).get(j) / (max / ySize))

* ySpace, 3, paintCicle);

if (j < list.get(i).size() - 1)

{

canvas.drawLine(left + right + j * xSpace, top

+ (ySize - list.get(i).get(j) / (max / ySize))

* ySpace, left + right + (j + 1) * xSpace, top

+ (ySize - list.get(i).get(j + 1) / (max / ySize))

* ySpace, paintCicle);

}

}


}


}


/**

* 把画布擦干净,准备绘图使用。

*/

private void clearCanvas()

{

Canvas canvas = sfh.lockCanvas();


canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);// 清除画布


drawXY(canvas);


sfh.unlockCanvasAndPost(canvas);

}

布局Layout:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/parent"

android:orientation="vertical" >


<ScrollView

android:id="@+id/scrollView1"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true"

>


<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >


<com.example.zz.LineChar

android:id="@+id/lineChar1"

android:layout_width="wrap_content"

android:layout_height="200dp" />


<com.example.zz.LineChar

android:id="@+id/lineChar2"

android:layout_width="wrap_content"

android:layout_height="100dp" />


</LinearLayout>

</ScrollView>


</RelativeLayout>


更多相关文章

  1. SurfaceView基本使用
  2. Android(安卓)图片添加水印
  3. MPAndroidChart的具体属性方法
  4. 制作TextView的倒影
  5. ScrollView和EditText 滑动冲突的解决办法
  6. 有用代码片段
  7. 教你如何绘制圆形头像
  8. Android布局(一)之基本视图View
  9. [置顶] 一个类搞定Android适配!!

随机推荐

  1. TextView中ellipsize属性 + 走马灯效果
  2. googlesamples/android-topeka学习笔记(
  3. android用视频当做背景
  4. WebView在Fragment中点击返回键返回上一
  5. Android指纹解锁,更好的接入到应用中
  6. 用Eclipse 来导入Android 工程 总结
  7. Android Studio 运行模拟器启动失败
  8. 转-Android Studio系列教程六--Gradle多
  9. Android布局常用
  10. Android重力感应