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

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

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

/** * Copyright (C) 2009 - 2013 SC 4ViewSoft SRL *   * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *   *      http://www.apache.org/licenses/LICENSE-2.0 *   * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.achartengine.chartdemo.demo.chart;import org.achartengine.ChartFactory;import org.achartengine.GraphicalView;import org.achartengine.chartdemo.demo.R;import org.achartengine.model.CategorySeries;import org.achartengine.model.SeriesSelection;import org.achartengine.renderer.DefaultRenderer;import org.achartengine.renderer.SimpleSeriesRenderer;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;public class PieChartBuilder extends Activity {  /** Colors to be used for the pie slices. */  private static int[] COLORS = new int[] { Color.GREEN, Color.BLUE, Color.MAGENTA, Color.CYAN };  /** The main series that will include all the data. */  private CategorySeries mSeries = new CategorySeries("");  /** The main renderer for the main dataset. */  private DefaultRenderer mRenderer = new DefaultRenderer();  /** Button for adding entered data to the current series. */  private Button mAdd;  /** Edit text field for entering the slice value. */  private EditText mValue;  /** The chart view that displays the data. */  private GraphicalView mChartView;  @Override  protected void onRestoreInstanceState(Bundle savedState) {    super.onRestoreInstanceState(savedState);    mSeries = (CategorySeries) savedState.getSerializable("current_series");    mRenderer = (DefaultRenderer) savedState.getSerializable("current_renderer");  }  @Override  protected void onSaveInstanceState(Bundle outState) {    super.onSaveInstanceState(outState);    outState.putSerializable("current_series", mSeries);    outState.putSerializable("current_renderer", mRenderer);  }  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.xy_chart);    mValue = (EditText) findViewById(R.id.xValue);    mRenderer.setZoomButtonsVisible(true);    mRenderer.setStartAngle(180);    mRenderer.setDisplayValues(true);    mAdd = (Button) findViewById(R.id.add);    mAdd.setEnabled(true);    mValue.setEnabled(true);    mAdd.setOnClickListener(new View.OnClickListener() {      public void onClick(View v) {        double value = 0;        try {          value = Double.parseDouble(mValue.getText().toString());        } catch (NumberFormatException e) {          mValue.requestFocus();          return;        }        mValue.setText("");        mValue.requestFocus();        mSeries.add("Series " + (mSeries.getItemCount() + 1), value);        SimpleSeriesRenderer renderer = new SimpleSeriesRenderer();        renderer.setColor(COLORS[(mSeries.getItemCount() - 1) % COLORS.length]);        mRenderer.addSeriesRenderer(renderer);        mChartView.repaint();      }    });  }  @Override  protected void onResume() {      super.onResume();    if (mChartView == null) {      LinearLayout layout = (LinearLayout) findViewById(R.id.chart);      mChartView = ChartFactory.getPieChartView(this, mSeries, mRenderer);      mRenderer.setClickEnabled(true);//      mChartView.setOnTouchListener(new View.OnTouchListener() {////@Override//public boolean onTouch(View v, MotionEvent event) {//// TODO Auto-generated method stub//Toast.makeText(PieChartBuilder.this, "huangchuyang", Toast.LENGTH_SHORT)//            .show();//return false;//}//});      mChartView.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {          SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();          if (seriesSelection == null) {            Toast.makeText(PieChartBuilder.this, "No chart element selected", Toast.LENGTH_SHORT)                .show();          } else {            for (int i = 0; i < mSeries.getItemCount(); i++) {              mRenderer.getSeriesRendererAt(i).setHighlighted(i == seriesSelection.getPointIndex());              mRenderer.getSeriesRendererAt(i).            }            mChartView.repaint();            Toast.makeText(                PieChartBuilder.this,                "Chart data point index " + seriesSelection.getPointIndex() + " selected"                    + " point value=" + seriesSelection.getValue(), Toast.LENGTH_SHORT).show();          }        }      });      layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,          LayoutParams.FILL_PARENT));    } else {      mChartView.repaint();    }  }}
下边是部分效果截图:



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



更多相关文章

  1. Android(安卓)各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴
  2. Android(安卓)富文本框实现 RichEditText
  3. Android中的第一个NDK的例子
  4. Android状态栏微技巧,动态控制状态栏显示和隐藏
  5. android box2d运行小例子,配置eclipse【转】
  6. android单向无限循环的轮播图效果。
  7. Android(安卓)贝塞尔曲线实现QQ拖拽清除效果
  8. android Canvas中的clipRect、drawBitmap
  9. Android(安卓)Accessibility 的简单用法

随机推荐

  1. Android(安卓)Handler 机制
  2. Android我还可以相信你多少系列文章四之
  3. android 触摸屏 相关文章
  4. Android第二十课 解决Logcat无法输出调试
  5. 关于android中网络图片下载中oom解决开源
  6. Android 手机模拟游戏手柄(USB,C#,winio)
  7. Android应用程序换肤实现系列(一)
  8. Flutter 与 Android(安卓)的交互
  9. Blog-05-《一周快速上手Kotlin For Andro
  10. 开发前奏曲之添加Android SDK平台工具