Android图表绘制.docx

上传人:b****8 文档编号:10982116 上传时间:2023-02-24 格式:DOCX 页数:16 大小:85.39KB
下载 相关 举报
Android图表绘制.docx_第1页
第1页 / 共16页
Android图表绘制.docx_第2页
第2页 / 共16页
Android图表绘制.docx_第3页
第3页 / 共16页
Android图表绘制.docx_第4页
第4页 / 共16页
Android图表绘制.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

Android图表绘制.docx

《Android图表绘制.docx》由会员分享,可在线阅读,更多相关《Android图表绘制.docx(16页珍藏版)》请在冰豆网上搜索。

Android图表绘制.docx

Android图表绘制

Android图表绘制

由于最新项目需要用到图表显示数据,所以参考网上的资源,写了一个demo,主要是通过在Activity发送不同的数据到view里面刷新显示,每发送一次数据,就显示几个随机数到view显示。

显示效果如图:

代码注释比较详细,就不做太多说明了。

ZywChartView.Java

@SuppressLint("DrawAllocation")

publicclassZywChartViewextendsView{

privateStringTAG="ZywChartView";

//默认边距

privatefloatMargin=40;

//圆半径

privateintcircleRadius=8;

//X,Y轴的单位长度

privatefloatXscale=20;

privatefloatYscale=20;

//X轴第1个节点到最后1个节点的长度

privatefloatxLength;

//Y轴第1个节点到最后1个节点的长度

privatefloatyLength;

//X轴第1个节点的偏移量

privatefloatxFirstPointOffset;

//y轴显示的节点间隔距离

privateintyScaleForData=5;

//画线颜色

privateintlineColor=this.getResources().getColor(R.color.saswell_yellow);

//原点坐标

privatefloatXpoint;

privatefloatYpoint;

privateStringyUnit="";

privateStringxUnit="";

//X,Y轴上面的显示文字

privateString[]Xlabel={"1","2","3","4","5","6","7"};

privateString[]Ylabel={"0","1","2","3","4","5","6","7","8",

"9","10"};

privatefinalstaticintY_SCALE_FOR_DATA_DAY=5;

privatefinalstaticintY_SCALE_FOR_DATA_WEEK=2;

privatefinalstaticintY_SCALE_FOR_DATA_MOUNTH=2;

//曲线数据

privateint[]Data={5,5,5,5,5,5,5};

publicZywChartView(Contextcontext,String[]xlabel,String[]ylabel,int[]data){

super(context);

this.Xlabel=xlabel;

this.Ylabel=ylabel;

this.Data=data;

}

publicZywChartView(Contextcontext,AttributeSetattrs,intdefStyleAttr){

super(context,attrs,defStyleAttr);

Log.e(TAG,"ZywChartView(Contextcontext,AttributeSetattrs,intdefStyleAttr)");

}

publicZywChartView(Contextcontext,AttributeSetattrs){

super(context,attrs);

init();

xFirstPointOffset=2*this.Margin;

Log.e(TAG,"ZywChartView(Contextcontext,AttributeSetattrs)");

}

publicZywChartView(Contextcontext){

super(context);

Log.e(TAG,"ZywChartView(Contextcontext)");

}

/**

*设置显示的数据

*@paramstr要显示的数据字符串

*@authorzyw

*/

publicvoidsetData(Stringstr){

String[]tempData;

tempData=str.split(",");

intyDataLength=0;

Log.e(TAG,"str="+str);

Data=newint[tempData.length];

Xlabel=newString[tempData.length];

if(tempData.length>=28){

yScaleForData=Y_SCALE_FOR_DATA_MOUNTH;

yDataLength=25;

xUnit=getResources().getString(R.string.x_unit_month);

yUnit=getResources().getString(R.string.y_unit_month);

}elseif(tempData.length>=12){

yScaleForData=Y_SCALE_FOR_DATA_DAY;

yDataLength=61;

xUnit=getResources().getString(R.string.x_unit_day);

yUnit=getResources().getString(R.string.y_unit_day);

}else{

yScaleForData=Y_SCALE_FOR_DATA_WEEK;

yDataLength=25;

xUnit=getResources().getString(R.string.x_unit_week);

yUnit=getResources().getString(R.string.y_unit_week);

}

Ylabel=newString[yDataLength];

for(inti=0;i

Ylabel[i]=Integer.toString(i);

//Log.e(TAG,"Ylable["+i+"]"+Ylabel[i]);

}

for(inti=0;i

Data[i]=Integer.parseInt(tempData[i]);

//Log.e(TAG,"Data["+i+"]"+Data[i]);

Xlabel[i]=Integer.toString(i+1);

Log.e(TAG,"Xlable["+i+"]"+Xlabel[i]);

}

invalidate();

}

//初始化数据

publicvoidinit(){

Xpoint=this.Margin;

Log.e(TAG,"this.getHeight()=="+this.getHeight());

Ypoint=this.getHeight()-this.Margin;

Xscale=(this.getWidth()-4*this.Margin)/(this.Xlabel.length);

Yscale=(this.getHeight()-3*this.Margin)/(this.Ylabel.length);

xLength=this.getWidth()-(4*this.Margin);

yLength=this.getHeight()-(2*this.Margin);

xFirstPointOffset=Xscale;

}

publicfloatgetMargin(){

returnMargin;

}

publicvoidsetMargin(intmargin){

Margin=margin;

}

@Override

protectedvoidonDraw(Canvascanvas){

canvas.drawColor(Color.BLACK);

Log.e(TAG,"onDraw");

Paintpaint=newPaint();

paint.setStyle(Paint.Style.STROKE);

paint.setAntiAlias(true);

paint.setColor(lineColor);

paint.setStrokeWidth(3);

init();

this.drawXLine(canvas,paint);

this.drawYLine(canvas,paint);

this.drawDashPath(canvas);

this.drawData(canvas);

this.drawXUnit(canvas);

this.drawYUnit(canvas);

}

//画虚线

privatevoiddrawDashPath(Canvascanvas){

Paintpaint=newPaint();

paint.setStyle(Paint.Style.STROKE);

paint.setColor(lineColor);

paint.setStrokeWidth(3);

Pathpath=newPath();

//绘制长度为10的实线,再绘制长度为10的空白,再绘制长度为10的实线,再回执长度为10的空白,依次重复,1为偏移量

PathEffecteffects=newDashPathEffect(newfloat[]{10,10,10,10},1);

paint.setPathEffect(effects);

//纵向线

for(inti=0;i*Xscale

floatstartX=Xpoint+i*Xscale+xFirstPointOffset;

floatstartY=Ypoint;

floatstopY=calY(Data[i]);

path.moveTo(startX,startY);

path.lineTo(startX,stopY);

canvas.drawPath(path,paint);

}

}

privatevoiddrawXUnit(Canvascanvas){

Paintp=newPaint();

p.setAntiAlias(true);

p.setColor(lineColor);

p.setStrokeWidth

(2);

p.setTextSize(this.Margin/2);

canvas.drawText(xUnit,this.getWidth()-this.Margin*2+this.Margin/4,Ypoint+this.Margin/5,p);

}

privatevoiddrawYUnit(Canvascanvas){

Paintp=newPaint();

p.setAntiAlias(true);

p.setColor(lineColor);

p.setStrokeWidth

(2);

p.setTextSize(this.Margin/2);

canvas.drawText(yUnit,this.Margin/2,this.Margin/2,p);

}

//画横纵轴

privatevoiddrawXLine(Canvascanvas,Paintp){

canvas.drawLine(Xpoint,Ypoint,this.getWidth()-this.Margin*2,Ypoint,

p);

canvas.drawLine(this.getWidth()-this.Margin*2,Ypoint,this.getWidth()

-this.Margin*2-this.Margin/3,Ypoint-this.Margin/3,p);

canvas.drawLine(this.getWidth()-this.Margin*2,Ypoint,this.getWidth()

-this.Margin*2-this.Margin/3,Ypoint+this.Margin/3,p);

}

privatevoiddrawYLine(Canvascanvas,Paintp){

canvas.drawLine(Xpoint,Ypoint,this.Margin,this.Margin,p);

canvas.drawLine(Xpoint,this.Margin,Xpoint-Xpoint/3,this.Margin

+this.Margin/3,p);

canvas.drawLine(Xpoint,this.Margin,Xpoint+Xpoint/3,this.Margin

+this.Margin/3,p);

}

//画数据

privatevoiddrawData(Canvascanvas){

Paintp=newPaint();

p.setAntiAlias(true);

p.setColor(lineColor);

p.setStrokeWidth(3);

p.setTextSize(this.Margin/2);

//横向

for(inti=0;i*Xscale

floatstartX=Xpoint+i*Xscale+xFirstPointOffset;

canvas.drawText(this.Xlabel[i],startX-this.Margin/4,

this.getHeight()-this.Margin/4,p);

canvas.drawCircle(startX,calY(Data[i]),circleRadius,p);

if(i!

=0){

canvas.drawLine(Xpoint+(i-1)*Xscale+xFirstPointOffset,calY(Data[i-1]),startX,calY(Data[i]),p);

}

}

//纵向

for(inti=0;(yLength-i*Yscale)>=this.Margin;i+=yScaleForData){

floatstartY=Ypoint-i*Yscale;

canvas.drawText(this.Ylabel[i],this.Margin/4,startY

+this.Margin/4,p);

}

}

/**

*

*@paramy

*@return

*/

privatefloatcalY(inty){

inty0=0;

inty1=0;

//Log.i("zzzz","y:

"+y);

try{

y0=Integer.parseInt(Ylabel[0]);

//Log.i("zzzz","y0"+y0);

y1=Integer.parseInt(Ylabel[1]);

//Log.i("zzzz","y1"+y1);

}catch(Exceptione){

//Log.i("zzzz","stringchangediserr");

return0;

}

try{

//Log.i("zzzz","返回数据"+(Ypoint-(y-y0)*Yscale/(y1-y0)));

returnYpoint-((y-y0)*Yscale/(y1-y0));

}catch(Exceptione){

//Log.i("zzzz","returniserr");

return0;

}

}

}

EnergyConsumptionActivity.java

publicclassEnergyConsumptionActivityextendsActivity{

privateintrandomNum;

privateRadioGrouprgModeSelect;

privateRadioButtonrbDayMode,rbWeekMode,rbMonthMode;

privateStringTAG="MainActivity";

privateButtonbtnSetData,btnTitle;

privateZywChartViewmyView;

privateStringstrData;

privateintmode,randomDataLength=10;

privatefinalstaticintDAY_MODE=1;

privatefinalstaticintWEEK_MODE=2;

privatefinalstaticintMONTH_MODE=3;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(edInstanceState);

setContentView(R.layout.activity_energy_consumption);

init();

}

privateOnClickListeneronClickListener=newOnClickListener(){

@Override

publicvoidonClick(Viewv){

switch(v.getId()){

caseR.id.btnSetData:

Log.e("ZYW","setData.");

sendData(mode);

break;

caseR.id.title_back:

Log.e(TAG,"finish.");

finish();

break;

default:

break;

}

}

};

privateOnCheckedChangeListenercheckedChangeListener=newOnCheckedChangeListener(){

@Override

publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){

try{

switch(checkedId){

caseR.id.rbDayMode:

mode=DAY_MODE;

randomDataLength=60;

break;

caseR.id.rbWeekMode:

mode=WEEK_MODE;

randomDataLength=24;

break;

caseR.id.rbmonthMode:

mode=MONTH_MODE;

randomDataLength=24;

break;

}

sendData(mode);

Log.e(TAG,"mode="+mode);

}catch(Exceptione){

e.printStackTrace();

}

}

};

/**

*在0-randomDataLength中生成一个随机数

*@return随机生成的数字组合字符串:

data1,data2,data3,...dataN

*/

publicStringgetRandomNum(intmode){

StringstrRandomNum="";

intmaxI=7;

//根据模式(天、周、月)确定要绘制的折线图

switch(mode){

caseDAY_MODE:

maxI=12;

break;

caseWEEK_MODE:

maxI=7;

break;

caseMONTH_MODE:

maxI=30;

break;

default:

Log.e(TAG,"modeiserror");

break;

}

for(inti=0;i

//在0-randomDataLength中生成一个随机数

randomNum=(int)(Math.random()*randomDataLength);

//Log.e(TAG,"randomNum=="+randomNum);

if(i!

=(xI-1)){

strRandomNum+=randomNum+",";

}

else{

strRandomNum+=randomNum;

}

}

Log.e(TAG,"strRandomNum=="+strRandomNum);

returnstrRandomNum;

}

/**

*发送数据

*@parammode

*/

publicvoidsendData(intmode){

strData=getRandomNum(mode);

myView.setData(strData);

}

publicvoidinit(){

btnSetData=(Button)findViewBy

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1