LWUIT + ChartComponent 之一实现饼图(PieChart)

本文来自http://blog.csdn.net/hellogv/
LWUIT + ChartComponent 之一实现饼图(PieChart)

本文源代码下载地址: http://download.csdn.net/source/872671
本文所用的Chart组件为J2me ChartComponent - ver 1.5.2,该组件的下载页面为 http://www.beanizer.org/site/index.php/en/Software/J2me-ChartComponent-ver-1.5.html。按照官网所说,ChartComponent的二进制开发包可以用于个人开发以及商业项目,而源代码则需要购买,为了支持作者开发,最好是购买一份啦。
ChartComponent,基于J2ME的LCDUI,而本文要演示的是,如何把ChartComponent运用到LWUIT之上,其他LCDUI的控件也可以参照这个方法,从而运作在LWUIT上。
在LWUIT上实现Chart功能,可以利用LWUIT固有的组件,混合使用,效果挺好的,例如加入chart的每个图块说明(说明与图块颜色对应)时,可以用FlowLayout排列方式+Label控件,能够自适应,比用UI直接画省好多功夫。
  • 首先,先在主文件UIDemoMIDlet加入以下代码:
  1. /**
  2. *lcdui的图像转换为lwuit的图像
  3. */
  4. staticImagelcdui2lwuit(javax.microedition.lcdui.Imagelcdui_img)
  5. {
  6. //新建RGB数组
  7. int[]bufferArray=newint[lcdui_img.getWidth()*lcdui_img.getHeight()];
  8. //把lcdui的Image保存为RGB数组
  9. lcdui_img.getRGB(bufferArray,0,lcdui_img.getWidth(),0,0,lcdui_img.getWidth(),lcdui_img.getHeight());
  10. //********透明背景,可以省略*******************************************//
  11. for(inti=0;i<bufferArray.length;i++){
  12. if((bufferArray[i]&0x00FFFFFF)==0x00FFFFFF)//如果是背景
  13. bufferArray[i]=bufferArray[i]&0x00FFFFFF;
  14. }
  15. //********透明背景,可以省略*******************************************//
  16. //新建lwuit的Image,并读取RGB数组
  17. Imageresult=Image.createImage(bufferArray,lcdui_img.getWidth(),lcdui_img.getHeight());
  18. returnresult;
  19. }
  20. /**
  21. *RGB颜色转换为int
  22. */
  23. staticintRGBtoInt(intr,intg,intb)
  24. {
  25. Stringresult=Integer.toHexString(r)+Integer.toHexString(g)+Integer.toHexString(b);
  26. returnInteger.parseInt(result,16);
  27. }
  • 其次,编写PieChartDemo的代码,代码有详细的注释,非常好理解:
  1. /*
  2. *LWUIT+ChartComponent,实现多种图表
  3. *作者:张国威(咪当俺系噜噜)
  4. *本例实现的是“饼图”
  5. */
  6. packagecom.sun.lwuit.uidemo;
  7. importcom.sun.lwuit.Button;
  8. importcom.sun.lwuit.Command;
  9. importcom.sun.lwuit.Font;
  10. importcom.sun.lwuit.Form;
  11. importcom.sun.lwuit.Image;
  12. importcom.sun.lwuit.Label;
  13. importcom.sun.lwuit.events.ActionEvent;
  14. importcom.sun.lwuit.events.ActionListener;
  15. importcom.sun.lwuit.layouts.FlowLayout;
  16. importorg.beanizer.j2me.charts.ChartItem;
  17. importorg.beanizer.j2me.charts.PieChart;
  18. publicclassPieChartDemoimplementsActionListener{
  19. publicFormform=newForm("VBarChartDemo");
  20. privateCommandbackCommand=newCommand("Back",1);
  21. finalPieChartpieChart=newPieChart("");
  22. PieChartDemo()
  23. {
  24. //饼图说明
  25. Stringchart_str[]={"█A:你好吗","█B:早上好","█C:中午好","█D:晚上好","█E:吃宵夜","█F:睡懒觉"};
  26. //饼图颜色
  27. int[][]color={{0,0,200},{0,200,0},{50,15,30},{100,0,200},{0,200,100},{200,100,200}};
  28. //饼图范围
  29. int[]percent={15,10,5,20,34,16};
  30. //绘制柱体的说明
  31. initChartInfo(chart_str,color);
  32. intwidth=form.getWidth();
  33. intheight=form.getHeight()-60;
  34. Imageimg_hbarChart=drawPieChart(pieChart,width,height,"",color,percent);//绘制柱体图
  35. Buttonbutton=newButton(img_hbarChart);
  36. button.getStyle().setBgTransparency(1);//透明背景,会非常消耗资源,速度减慢,注意使用
  37. button.setBorderPainted(false);
  38. form.addComponent(button);
  39. form.addCommand(backCommand);
  40. form.setCommandListener(this);
  41. form.setLayout(newFlowLayout());//必须使用这种排列,FlowLayout最适合
  42. }
  43. privatevoidinitChartInfo(String[]chart_str,int[][]color)
  44. {
  45. for(inti=0;i<chart_str.length;i++)//循环
  46. {
  47. Labelchart_info=newLabel(chart_str[i]);
  48. chart_info.getStyle().setFgColor(UIDemoMIDlet.RGBtoInt(color[i][0],color[i][1],color[i][2]));
  49. form.addComponent(chart_info);
  50. }
  51. }
  52. privateImagedrawPieChart(ChartItemitem,
  53. intwidth,
  54. intheight,
  55. Stringimagefile,
  56. int[][]color,//柱体颜色
  57. int[]percent)//柱体长度(百分比)
  58. {
  59. item.setFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_SMALL);
  60. item.setDrawAxis(true);
  61. item.setPreferredSize(width-80,width-80);//设置chart控件的大小,饼图必须width=height
  62. if(imagefile.length()>0)//需要使用背景时
  63. {
  64. try{
  65. javax.microedition.lcdui.Imageimg=javax.microedition.lcdui.Image.createImage(imagefile);//读取背景图
  66. item.setBackgroundImage(img);//设置背景图
  67. }catch(Exceptionex){ex.printStackTrace();}
  68. }
  69. item.showShadow(true);//使用阴影特效
  70. item.setShadowColor(20,20,20);//设置阴影颜色
  71. item.setColor(40,40,200);
  72. item.resetData();
  73. for(inti=0;i<color.length;i++)//循环绘画柱体
  74. {
  75. item.addElement(String.valueOf((char)('a'+i)),percent[i],color[i][0],color[i][1],color[i][2]);
  76. }
  77. item.setMaxValue(100);//柱体代表数值的显示范围,100%
  78. //这个是lcdui的Image
  79. javax.microedition.lcdui.Imagelcdui_img=
  80. javax.microedition.lcdui.Image.createImage(width,height);//饼图大小,图像>控件
  81. //这个是lcdui的Graphics
  82. javax.microedition.lcdui.Graphicslcdui_g=lcdui_img.getGraphics();
  83. pieChart.drawPie(lcdui_g,
  84. 40,//x
  85. 40,//y
  86. width-100,//宽
  87. width-100);//长,这里设置的大小必须比width,height小,才能完全显示
  88. returnUIDemoMIDlet.lcdui2lwuit(lcdui_img);
  89. }
  90. publicvoidactionPerformed(ActionEventarg0){
  91. if(arg0.getCommand()==backCommand)
  92. {
  93. UIDemoMIDlet.backToMainMenu();
  94. }
  95. }
  96. }


你可能感兴趣的:(.net,UI,PHP,Blog,sun)