3D柱状图

来源:互联网 发布:php断开数据库连接 编辑:程序博客网 时间:2024/05/17 10:42


3D的柱状图,接了个私活儿,需要一个柱状图需求很蛋疼,但是我仔细想了想,,其实也没有想象中的那么复杂。

我默默的沉默了1分钟,心里在想,老夫身怀程序员光环,搞不定妹子就算了,还搞不定你个柱状图!!!!!!



好吧,苦想2分钟后灵光一闪,开始动手:

上代码:

package com.example.helloword;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.Typeface;import android.util.AttributeSet;import android.view.View;import android.widget.SeekBar;public class ToonView extends View {private Paint paint;private Paint paint_2;private Paint paintText;private List<Integer> xlist;//x坐标标签private List<Integer> ylist;//y坐标标签private List<Integer> params;//参数集private int paintColor=-1;private boolean isDrawCheek=true;public float XSpac=50;public float YSpac=50;public float rightXspac=50;public float rightYspac=50;private int textSize=20;private int viewWidth=40;private int sideWidth=10;private Paint cheekPaint;private Paint cheekPaint_2;private Paint cheekPaint_3;private List<List<String>> colors=new ArrayList<List<String>>();public ToonView(Context context) {super(context);// TODO Auto-generated constructor stubinitWedget();}public ToonView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubinitWedget();}public ToonView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stubinitWedget();}@Overrideprotected void onDraw(Canvas canvas) {drawXY(canvas);//画X跟Y轴drawHistogram(canvas);super.onDraw(canvas);}private void drawHistogram(Canvas canvas) {//画柱状图// TODO Auto-generated method stubfloat Yoffset=((getHeight()-YSpac)/(ylist.size()));float Xoffset=((getWidth()-XSpac)/(xlist.size()));float rulerOffset=0;if(xlist.size()<2)throw new IllegalArgumentException("the params argument is <2");elserulerOffset=(xlist.get(1)-xlist.get(0));for(int i=0;i<params.size();i++){int randomColor=(int)(Math.random()*3);List<String> clist=colors.get(randomColor);paint.setColor(Color.parseColor(clist.get(1)));cheekPaint_2.setColor(Color.parseColor(clist.get(0)));cheekPaint_3.setColor(Color.parseColor(clist.get(2)));int param=params.get(i);float histigramHight=getHeight()-param*(Yoffset/rulerOffset);canvas.drawLine(Xoffset*i+35+XSpac,getHeight()-YSpac,Xoffset*i+35+XSpac,histigramHight-YSpac, paint);if(isDrawCheek){//canvas.drawLine(Yoffset*i+10,getHeight()-5,Yoffset*i+10,histigramHight-15, cheekPaint);//canvas.drawLine(Yoffset*i+60,getHeight()-5,Yoffset*i+60,histigramHight-15, cheekPaint);//canvas.drawLine(Yoffset*i+10, histigramHight-15, Yoffset*i+60, histigramHight-15, cheekPaint);canvas.drawLine(Xoffset*i+10+XSpac,getHeight()-YSpac,Xoffset*i+10+XSpac,histigramHight-YSpac, cheekPaint_2);canvas.drawLine(Xoffset*i+60+XSpac,getHeight()-YSpac,Xoffset*i+60+XSpac,histigramHight-YSpac, cheekPaint_3);}resetPaint();}}private void drawXY(Canvas canvas) {//画坐标// TODO Auto-generated method stubcanvas.drawLine(XSpac,0,XSpac,getHeight()-YSpac, paint_2);//Xcanvas.drawLine(XSpac,getHeight()-YSpac,getWidth(),getHeight()-YSpac, paint_2);//Ycanvas.drawLine(getWidth()-1,0,getWidth()-1,getHeight()-YSpac, paint_2);//Xfloat Xoffset=((getWidth()-XSpac)/(xlist.size()));float Yoffset=((getHeight()-YSpac)/(ylist.size()));for(int i=0;i<ylist.size();i++){//画X//canvas.drawLine(5,Xoffset*i,10,Xoffset*i, paint_2);canvas.drawLine(XSpac,Yoffset*i,getWidth(),Yoffset*i, paint_2);}for(int i=0;i<xlist.size();i++){//画Y//canvas.drawLine(Yoffset*i,getHeight()-5,Yoffset*i,getHeight()-10, paint_2);canvas.drawLine(Xoffset*i+XSpac,getHeight()-YSpac,Xoffset*i+XSpac,0, paint_2);}for(int i=0;i<ylist.size();i++){//画字canvas.drawText(ylist.get(i)+"",0, getHeight()-Yoffset*i-YSpac, paintText);}for(int i=0;i<xlist.size();i++){canvas.drawText(xlist.get(i)+"",XSpac+Xoffset*i,getHeight()-YSpac+textSize, paintText);}}public void initViewData(List<Integer> xlist,List<Integer> ylist,List<Integer> params){this.xlist=xlist;this.ylist=ylist;this.params=params;}private void initWedget() {// TODO Auto-generated method stubpaint=new Paint();paint.setColor(Color.parseColor("#1D6BB5"));paint.setTypeface(Typeface.DEFAULT);paint.setAntiAlias(true);paint.setStrokeWidth(viewWidth);paint_2=new Paint();paint_2.setColor(Color.parseColor("#88999999"));paint_2.setTypeface(Typeface.DEFAULT);paint_2.setAntiAlias(true);paint_2.setStrokeWidth(2);cheekPaint=new Paint();cheekPaint.setColor(Color.parseColor("#ff0000"));cheekPaint.setTypeface(Typeface.DEFAULT);cheekPaint.setAntiAlias(true);cheekPaint.setStrokeWidth(1);cheekPaint_2=new Paint();cheekPaint_2.setColor(Color.parseColor("#4988C5"));cheekPaint_2.setTypeface(Typeface.DEFAULT);cheekPaint_2.setAntiAlias(true);cheekPaint_2.setStrokeWidth(sideWidth);cheekPaint_3=new Paint();cheekPaint_3.setColor(Color.parseColor("#135595"));cheekPaint_3.setTypeface(Typeface.DEFAULT);cheekPaint_3.setAntiAlias(true);cheekPaint_3.setStrokeWidth(sideWidth);paintText=new Paint();paintText.setColor(Color.parseColor("#ffffff"));paintText.setTypeface(Typeface.DEFAULT);paintText.setAntiAlias(true);paintText.setStrokeWidth(2);paintText.setTextSize(textSize);initColors();}private void initColors() {// TODO Auto-generated method stubList<String> list1=new ArrayList<String>();list1.add("#4988C5");list1.add("#1D6BB5");list1.add("#135595");List<String> list2=new ArrayList<String>();list2.add("#69A3CC");list2.add("#3F8AB9");list2.add("#325F7D");List<String> list3=new ArrayList<String>();list3.add("#AAE0F7");list3.add("#7BD2F5");list3.add("#64ABC9");colors.add(list1);colors.add(list2);colors.add(list3);}private void resetPaint(){paint.setColor(Color.parseColor("#1D6BB5"));cheekPaint_2.setColor(Color.parseColor("#4988C5"));cheekPaint_3.setColor(Color.parseColor("#135595"));}public void updataUI(){invalidate();}}
好了

对外开放updataUI方法方便你们实时去更新这个柱状图,调用规则:

initViewData(......).updataUI();
去更新你的视图!

效果图如下:


1 0