- public classWeatnerChartViewextends View {
- privateArrayList items;
- private String unit;
- privateString yFormat = "0";
- private Context context;
- public voidSetTuView(ArrayList list, String unitInfo) {
- this.items = list;
- this.unit = unitInfo;
- }
- public WeatnerChartView(Context ct) {
- super(ct);
- this.context = ct;
- }
- public WeatnerChartView(Context ct, AttributeSet attrs) {
- super(ct, attrs);
- this.context = ct;
- }
- publicWeatnerChartView(Context ct, AttributeSet attrs,int defStyle) {
- super(ct, attrs, defStyle);
- this.context = ct;
- }
- @SuppressLint("DrawAllocation")
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- if(items ==null) {
- return;
- }
- intheight = getHeight();
- intwidth = getWidth();
- intsplit = dip2px(context, 8);
- intmarginl = width / 24;//12
- intmargint = dip2px(context, 60);
- intmargint2 = dip2px(context, 25);
- intbheight = height - margint - 2 * split;
- Paint paint =new Paint(Paint.ANTI_ALIAS_FLAG);
- paint.setColor(Color.parseColor("#ffffff"));//#7fffffff
- paint.setStrokeWidth(4);
- paint.setStyle(Style.STROKE);
- // 画单位Paint p =new Paint();
- p.setAlpha(0x0000ff);
- p.setTextSize(sp2px(context, 15));
- p.setColor(Color.parseColor("#28bbff"));
- canvas.drawText(unit, split, margint2 + split * 2, p);
- // 画X坐标ArrayList xlist = newArrayList();
- paint.setColor(Color.GRAY);
- for(inti = 0; i < items.size(); i++) {
- intspan = (width - 2 * marginl) / items.size();
- intx = marginl + span / 2 + span * i;
- xlist.add(x);
- drawText(items.get(i).getX(), x, split * 2, canvas);
- }
- floatmax = Float.MIN_VALUE;
- floatmin = Float.MAX_VALUE;
- for(inti = 0; i < items.size(); i++) {
- floaty = items.get(i).getY();
- if(y > max) {
- max = y;
- }
- if(y < min) {
- min = y;
- }
- }
- floatspan = max - min;
- if(span == 0) {
- span = 6.0f;
- }
- max = max + span / 6.0f;
- min = min - span / 6.0f;
- // 获取点集合Point[] mPoints = getPoints(xlist, max, min, bheight, margint);
- // 画线paint.setColor(Color.parseColor("#7fffffff"));
- paint.setStyle(Style.STROKE);
- paint.setStrokeWidth(3);//8
- drawLine(mPoints, canvas, paint);
- // 画点paint.setColor(Color.parseColor("#28bbff"));
- paint.setStyle(Style.FILL);
- for(inti = 0; i < mPoints.length; i++) {
- canvas.drawCircle(mPoints[i].x, mPoints[i].y, 8, paint);//radius=12String yText =new java.text.DecimalFormat(yFormat).format(items
- .get(i).getY());
- drawText(yText+"°", mPoints[i].x,
- mPoints[i].y - dip2px(context, 12), canvas);
- }
- }
- privatePoint[] getPoints(ArrayList xlist, floatmax,float min,
- inth,int top) {
- Point[] points =new Point[items.size()];
- for(inti = 0; i < items.size(); i++) {
- intph = top + h
- - (int) (h * ((items.get(i).getY() - min) / (max - min)));
- points[i] =new Point(xlist.get(i), ph);
- }
- return points;
- }
- private void drawLine(Point[] ps, Canvas canvas, Paint paint) {
- Point startp =new Point();
- Point endp =new Point();
- for(inti = 0; i < ps.length - 1; i++) {
- startp = ps[i];
- endp = ps[i + 1];
- canvas.drawLine(startp.x, startp.y, endp.x, endp.y, paint);
- }
- }
- private voiddrawText(String text,intx,int y, Canvas canvas) {
- Paint p =new Paint();
- p.setAlpha(0x0000ff);
- p.setTextSize(sp2px(context, 15));
- p.setTextAlign(Paint.Align.CENTER);
- p.setColor(Color.WHITE);
- canvas.drawText(text, x, y, p);
- }
- publicArrayList getItems() {
- return items;
- }
- public voidsetItems(ArrayList items) {
- this.items = items;
- }
- public String getyFormat() {
- return yFormat;
- }
- public void setyFormat(String yFormat) {
- this.yFormat = yFormat;
- }
- public intsp2px(Context context,float spValue) {
- final floatfontScale = context.getResources().getDisplayMetrics().scaledDensity;
- return(int) (spValue * fontScale + 0.5f);
- }
- public intdip2px(Context context,float dpValue) {
- final floatscale = context.getResources().getDisplayMetrics().density;
- return(int) (dpValue * scale + 0.5f);
- }
- }
来源: http://www.bubuko.com/infodetail-1963852.html