2014年12月12日 星期五

[Android] 自己畫折線圖 Canvas

示意圖

如此如此,這般這般

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

public class LineChart4 extends View {
Paint paintX, paintXMore, paintText, paintLineFill, paintLine;
ArrayList<Integer> randomArray = new ArrayList<Integer>();
public LineChart4(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub

for(int i = 0; i < 10; i++){
randomArray.add((int)(Math.random()*500+500));
System.out.println("randomArray...." + randomArray.get(i));
}

setPaintType();
getViewSize();

}


private void setPaintType() {
// TODO Auto-generated method stub
//底線
paintX = new Paint();
paintX.setColor(Color.BLACK);
paintX.setStrokeWidth(4);
//X軸的很多條線
paintXMore = new Paint();
paintXMore.setColor(Color.GRAY);
paintXMore.setStrokeWidth(1);
//字字字字字字
paintText = new Paint();
paintText.setColor(Color.RED);
paintText.setTextSize(70);
//折線圖的塞滿
paintLineFill = new Paint();
paintLineFill.setColor(Color.CYAN);
paintLineFill.setStrokeWidth(4);
paintLineFill.setStyle(Style.FILL);
//折線圖的線
paintLine = new Paint();
paintLine.setColor(Color.RED);
paintLine.setStrokeWidth(10);
paintLine.setStyle(Style.STROKE);
}


private void getViewSize() {
// TODO Auto-generated method stub
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
layoutParams.height = this.getHeight();
layoutParams.width = this.getWidth();
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
Path path = new Path();
//比例
int scaleSpacing = this.getHeight() / Collections.max(randomArray);
//畫X線
canvas.drawLine(0, this.getHeight() - 50f, this.getWidth(), this.getHeight() - 50f, paintX);

//畫X的很多條線
int drawMoreLineX = 10;
int textSpacing = this.getWidth() / drawMoreLineX;
for(int i = 1; i <= drawMoreLineX; i++)
canvas.drawLine(0, this.getHeight() - ((this.getHeight() / drawMoreLineX) * i), this.getWidth(), this.getHeight() - ((this.getHeight() / drawMoreLineX) * i), paintXMore);
for(int i = 1; i <= drawMoreLineX; i++)
canvas.drawText(String.valueOf(i), textSpacing * i , this.getHeight(), paintText);
//畫線
path.moveTo(0, this.getHeight() - 50f);

for(int i = 0; i < randomArray.size(); i++){
int y = i;
path.lineTo((this.getWidth() / randomArray.size()) * ++y, scaleSpacing * randomArray.get(i));
}path.lineTo(this.getWidth(), this.getHeight() - 50f);
canvas.drawPath(path, paintLine);
canvas.drawPath(path, paintLineFill);
}

}


下載地址:https://drive.google.com/open?id=0B2WSxYpFVHkaOWhsSGlITFJvTW8&authuser=0
參考網址:http://www.cnblogs.com/aibuli/p/950c34f2bc0d02cbd290dd6a8339d42a.html

沒有留言:

張貼留言