关键词: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