Android chart、图表、条形图、饼图 pie chart 等的实现及点击事件、监听器的实现 click ,achartengine

关键词:android,achartengine,pie chart,click,点击,监听器 

最近需要在自己的android应用上实现统计图的功能,后来定为要实现饼图(扇形图),网上虽然有很多的例子和各种实现方法,但是就老是没有找到一个可以在统计图尤其是饼图中实现点击(click)功能的demo,后来经过自己多天废寝忘食的寻找,终于让我找到了一个可以增加点击事件的统计图尤其是饼图的例子。

       下边给出饼图部分的一些代码和实现效果,此例子用的是achartengine的包,详细代码请见文章末尾的下载网址。因为它的实现效果还不是我最想要的,我想要实现的是点击饼图的某一部分,被点击的那一部分又可以分成另外几个小部分显示出来,这样的实现效果暂时不会,请各位多多指教啊!

       

[java]  view plain copy
  1. /** 
  2.  * Copyright (C) 2009 - 2013 SC 4ViewSoft SRL 
  3.  *   
  4.  * Licensed under the Apache License, Version 2.0 (the "License"); 
  5.  * you may not use this file except in compliance with the License. 
  6.  * You may obtain a copy of the License at 
  7.  *   
  8.  *      http://www.apache.org/licenses/LICENSE-2.0 
  9.  *   
  10.  * Unless required by applicable law or agreed to in writing, software 
  11.  * distributed under the License is distributed on an "AS IS" BASIS, 
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  13.  * See the License for the specific language governing permissions and 
  14.  * limitations under the License. 
  15.  */  
  16. package org.achartengine.chartdemo.demo.chart;  
  17.   
  18. import org.achartengine.ChartFactory;  
  19. import org.achartengine.GraphicalView;  
  20. import org.achartengine.chartdemo.demo.R;  
  21. import org.achartengine.model.CategorySeries;  
  22. import org.achartengine.model.SeriesSelection;  
  23. import org.achartengine.renderer.DefaultRenderer;  
  24. import org.achartengine.renderer.SimpleSeriesRenderer;  
  25.   
  26. import android.app.Activity;  
  27. import android.graphics.Color;  
  28. import android.os.Bundle;  
  29. import android.view.MotionEvent;  
  30. import android.view.View;  
  31. import android.view.ViewGroup.LayoutParams;  
  32. import android.widget.Button;  
  33. import android.widget.EditText;  
  34. import android.widget.LinearLayout;  
  35. import android.widget.Toast;  
  36.   
  37. public class PieChartBuilder extends Activity {  
  38.   /** Colors to be used for the pie slices. */  
  39.   private static int[] COLORS = new int[] { Color.GREEN, Color.BLUE, Color.MAGENTA, Color.CYAN };  
  40.   /** The main series that will include all the data. */  
  41.   private CategorySeries mSeries = new CategorySeries("");  
  42.   /** The main renderer for the main dataset. */  
  43.   private DefaultRenderer mRenderer = new DefaultRenderer();  
  44.   /** Button for adding entered data to the current series. */  
  45.   private Button mAdd;  
  46.   /** Edit text field for entering the slice value. */  
  47.   private EditText mValue;  
  48.   /** The chart view that displays the data. */  
  49.   private GraphicalView mChartView;  
  50.   
  51.   @Override  
  52.   protected void onRestoreInstanceState(Bundle savedState) {  
  53.     super.onRestoreInstanceState(savedState);  
  54.     mSeries = (CategorySeries) savedState.getSerializable("current_series");  
  55.     mRenderer = (DefaultRenderer) savedState.getSerializable("current_renderer");  
  56.   }  
  57.   
  58.   @Override  
  59.   protected void onSaveInstanceState(Bundle outState) {  
  60.     super.onSaveInstanceState(outState);  
  61.     outState.putSerializable("current_series", mSeries);  
  62.     outState.putSerializable("current_renderer", mRenderer);  
  63.   }  
  64.   
  65.   @Override  
  66.   protected void onCreate(Bundle savedInstanceState) {  
  67.     super.onCreate(savedInstanceState);  
  68.     setContentView(R.layout.xy_chart);  
  69.     mValue = (EditText) findViewById(R.id.xValue);  
  70.     mRenderer.setZoomButtonsVisible(true);  
  71.     mRenderer.setStartAngle(180);  
  72.     mRenderer.setDisplayValues(true);  
  73.   
  74.     mAdd = (Button) findViewById(R.id.add);  
  75.     mAdd.setEnabled(true);  
  76.     mValue.setEnabled(true);  
  77.     mAdd.setOnClickListener(new View.OnClickListener() {  
  78.       public void onClick(View v) {  
  79.         double value = 0;  
  80.         try {  
  81.           value = Double.parseDouble(mValue.getText().toString());  
  82.         } catch (NumberFormatException e) {  
  83.           mValue.requestFocus();  
  84.           return;  
  85.         }  
  86.         mValue.setText("");  
  87.         mValue.requestFocus();  
  88.         mSeries.add("Series " + (mSeries.getItemCount() + 1), value);  
  89.         SimpleSeriesRenderer renderer = new SimpleSeriesRenderer();  
  90.         renderer.setColor(COLORS[(mSeries.getItemCount() - 1) % COLORS.length]);  
  91.         mRenderer.addSeriesRenderer(renderer);  
  92.         mChartView.repaint();  
  93.       }  
  94.     });  
  95.   }  
  96.   
  97.   @Override  
  98.   protected void onResume() {  
  99.         
  100.     super.onResume();  
  101.     if (mChartView == null) {  
  102.       LinearLayout layout = (LinearLayout) findViewById(R.id.chart);  
  103.       mChartView = ChartFactory.getPieChartView(this, mSeries, mRenderer);  
  104.       mRenderer.setClickEnabled(true);  
  105. //      mChartView.setOnTouchListener(new View.OnTouchListener() {  
  106. //        
  107. //      @Override  
  108. //      public boolean onTouch(View v, MotionEvent event) {  
  109. //          // TODO Auto-generated method stub  
  110. //          Toast.makeText(PieChartBuilder.this, "huangchuyang", Toast.LENGTH_SHORT)  
  111. //            .show();  
  112. //          return false;  
  113. //      }  
  114. //  });  
  115.       mChartView.setOnClickListener(new View.OnClickListener() {  
  116.         @Override  
  117.         public void onClick(View v) {  
  118.           SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();  
  119.           if (seriesSelection == null) {  
  120.             Toast.makeText(PieChartBuilder.this"No chart element selected", Toast.LENGTH_SHORT)  
  121.                 .show();  
  122.           } else {  
  123.             for (int i = 0; i < mSeries.getItemCount(); i++) {  
  124.               mRenderer.getSeriesRendererAt(i).setHighlighted(i == seriesSelection.getPointIndex());  
  125.               mRenderer.getSeriesRendererAt(i).  
  126.             }  
  127.             mChartView.repaint();  
  128.             Toast.makeText(  
  129.                 PieChartBuilder.this,  
  130.                 "Chart data point index " + seriesSelection.getPointIndex() + " selected"  
  131.                     + " point value=" + seriesSelection.getValue(), Toast.LENGTH_SHORT).show();  
  132.           }  
  133.         }  
  134.       });  
  135.       layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,  
  136.           LayoutParams.FILL_PARENT));  
  137.     } else {  
  138.       mChartView.repaint();  
  139.     }  
  140.   }  
  141. }  
下边是部分效果截图:


 


完整代码下载地址: http://download.csdn.net/detail/jy_sharer/6524561

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值