0

achartengine ライブラリを使用したグラフの表示に関する問題に直面しています。AボタンとBボタンと言う2つのメニューボタンがあります。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 をレイアウトから削除すると、ボタンを初めてクリックしたときに 1 回表示できますが、2 回目のボタンをクリックすると表示されません。 time.この 2 日間からこの問題に直面しているので、助けてください。

4

0 に答える 0