0

我在使用 achartengine 库显示图形时遇到问题。我有两个菜单按钮,比如说AB按钮。现在,当您单击A菜单按钮时,将显示折线图,当您单击B菜单按钮时,将显示饼图。我面临的问题是,当我再次单击A菜单按钮以显示它没有显示任何图形的行时, B菜单按钮也发生了同样的情况。

这是我的主要活动课程:

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.SeriesSelection;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.capricorn.RayMenu;

public class MainActivity extends Activity {

    private static final int[] ITEM_DRAWABLES = { R.drawable.ic_1,
            R.drawable.ic_2, R.drawable.ic_3, R.drawable.ic_4, R.drawable.ic_5,
            R.drawable.ic_6 };

    private GraphicalView mChartView;
    private GraphicalView pieChartView;
    private CategorySeries pieSeries = new CategorySeries("Pie Chart");
    private DefaultRenderer pieRenderer = new DefaultRenderer();
    private TimeSeries series = new TimeSeries("Line1");
    private XYMultipleSeriesDataset dataSet = new XYMultipleSeriesDataset();
    private XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
    private XYSeriesRenderer renderer = new XYSeriesRenderer();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final int itemCount = ITEM_DRAWABLES.length;

        RayMenu rayMenu = (RayMenu) findViewById(R.id.ray_menu);
        for (int i = 0; i < itemCount; i++) {
            ImageView item = new ImageView(this);
            item.setImageResource(ITEM_DRAWABLES[i]);

            final int position = i;
            rayMenu.addItem(item, new OnClickListener() {

                @Override
                public void onClick(View v) {
                    action(position);
                }
            });// Add a menu item
        }

    }

    public void lineGraph() {
        int[] X = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        int[] Y = { 30, 34, 45, 57, 77, 89, 100, 111, 123, 145 };
        for (int i = 0; i < X.length; i++) {
            series.add(X[i], Y[i]);
        }

        dataSet.addSeries(series);
        renderer.setColor(Color.RED);
        renderer.setPointStyle(PointStyle.CIRCLE);
        renderer.setFillPoints(true);
        multiRenderer.setApplyBackgroundColor(true);
        multiRenderer.setBackgroundColor(Color.WHITE);
        multiRenderer.setMarginsColor(Color.WHITE);
        multiRenderer.setAxesColor(Color.BLACK);
        multiRenderer.setLabelsTextSize(20);
        multiRenderer.setXLabelsColor(Color.BLACK);
        multiRenderer.setYLabelsColor(0, Color.BLACK);
        multiRenderer.addSeriesRenderer(renderer);
    }

    public void pieGraph() {
        int[] values = { 25, 15, 20, 40 };
        int k =0;
        for(int value : values){
            pieSeries.add("Section" + ++k, value);
        }
        int[] COLORS = new int[] { Color.GREEN, Color.BLUE,
                Color.MAGENTA, Color.CYAN };
        for(int colors : COLORS){
            SimpleSeriesRenderer simple = new SimpleSeriesRenderer();
            simple.setColor(colors);
            pieRenderer.addSeriesRenderer(simple);
        }

    }

    public void action(int id) {
        LinearLayout layout = (LinearLayout) findViewById(R.id.chart);

        if (id == 0) {
            layout.removeView(pieChartView);

            lineGraph();

            if (mChartView == null) {

                mChartView = ChartFactory.getLineChartView(this, dataSet,
                        multiRenderer);

                multiRenderer.setClickEnabled(true);
                multiRenderer.setSelectableBuffer(10);
                mChartView.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {

                        SeriesSelection seriesSelection = mChartView
                                .getCurrentSeriesAndPoint();
                        if (seriesSelection == null) {
                            Toast.makeText(MainActivity.this,
                                    "No chart element", Toast.LENGTH_SHORT)
                                    .show();
                        } else {

                            Toast.makeText(
                                    MainActivity.this,
                                    "Chart element in series index "
                                            + seriesSelection.getSeriesIndex()
                                            + " data point index "
                                            + seriesSelection.getPointIndex()
                                            + " was clicked"
                                            + " closest point value X="
                                            + seriesSelection.getXValue()
                                            + ", Y="
                                            + seriesSelection.getValue(),
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                });
                layout.addView(mChartView, new LayoutParams(
                        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

            } else {
                mChartView.repaint();
            }
        } else if (id == 1) {
            layout.removeView(mChartView);
            pieGraph();
            if (pieChartView == null) {

                pieChartView = ChartFactory.getPieChartView(this, pieSeries,
                        pieRenderer);
                pieRenderer.setClickEnabled(true);
                pieChartView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        SeriesSelection seriesSelection = pieChartView
                                .getCurrentSeriesAndPoint();
                        if (seriesSelection == null) {
                            Toast.makeText(MainActivity.this,
                                    "No chart element selected",
                                    Toast.LENGTH_SHORT).show();
                        } else {
                            for (int i = 0; i < pieSeries.getItemCount(); i++) {
                                pieRenderer.getSeriesRendererAt(i)
                                        .setHighlighted(
                                                i == seriesSelection
                                                        .getPointIndex());
                            }

                            Toast.makeText(
                                    MainActivity.this,
                                    "Chart data point index "
                                            + seriesSelection.getPointIndex()
                                            + " selected" + " point value="
                                            + seriesSelection.getValue(),
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                });
                layout.addView(pieChartView, new LayoutParams(
                        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            } else {
                pieChartView.repaint();
            }
        } else if (id == 2) {

        } else if (id == 3) {

        } else if (id == 4) {

        } else if (id == 5) {

        }
    }

}

正如您从上面的代码中看到的那样,我正在使用 layout.removeView 从布局中删除 GraphicalView 然后我可以在您第一次单击按钮时查看一次,但当您第二次单击按钮时不可见时间。请帮助我,我从过去 2 天开始就面临这个问题。

4

0 回答 0