2

私は AchartEngine を初めて使用します。AndroidでAchartEngineを使用してBarchartを作成しています。私は aChartEngine API を見て、Barchart を作成しました。正常に動作しています。

  1. 実際のビューを見たいときは、右下にあるズームボタンをクリックしてズーム率を下げる必要があります。ズームボタンを使用せずに、プログラムで正確に宣言したものを完全なバーチャートに表示する必要があります。
  2. あるビューから別のビューに移動する必要があります。そのため、ontouchlistner でグラフィカル ビューを 1 つ作成しましたが、エラーが表示されます。

どんなアイデアでも大歓迎です。ここで何か不足していますか?

public class GraphicViewExample extends Activity {
  private String[] mMonth = new String[] { "Jan", "Feb", "Mar", "Apr", "May",
            "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
    int[] x = { 0, 1, 2, 3, 4, 5, 6, 7 };
    int[] income = { 2000, 2500, 2700, 3000, 2800, 3500, 3700, 3800 };
    public static final String TYPE = "type";
    private XYMultipleSeriesDataset mDataset = getDemoDataset();
    private XYMultipleSeriesRenderer mRenderer = getDemoRenderer();
    private GraphicalView mChartView;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.graphicviewexample);
        if (mChartView == null) {
            LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
            mChartView = ChartFactory.getBarChartView(this, mDataset,
                    mRenderer, Type.DEFAULT);
            mRenderer.setSelectableBuffer(100);
            layout.addView(mChartView, new LayoutParams(
                    LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        } else {
            mChartView.repaint();
        }

        mChartView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub

                @SuppressWarnings("unused")
                /*SeriesSelection seriesSelection = mChartView
                        .getCurrentSeriesAndPoint();*/
                SimpleSeriesRenderer r = new SimpleSeriesRenderer();
                mRenderer.removeAllRenderers();
                r.setColor(Color.RED);
                mChartView.repaint();
                return true;
            }
        });

        /*mChartView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                 * LinearLayout slayout = (LinearLayout)
                 * findViewById(R.id.chart); ChartView =
                 * ChartFactory.getBarChartView( getApplicationContext(),
                 * sDataset, smRenderer, Type.DEFAULT);
                 * slayout.addView(ChartView, new LayoutParams(
                 * LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
                 * 
                 * ChartView.repaint();

                mChartView.repaint();
            }
        });*/
    }

    private XYMultipleSeriesDataset getDemoDataset() {

        XYSeries incomeSeries = new XYSeries("Income");
        for (int i = 0; i < x.length; i++) {
            incomeSeries.add(i, income[i]);
        }

        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
        dataset.addSeries(incomeSeries);
        return dataset;

    }

    private XYMultipleSeriesRenderer getDemoRenderer() {
        XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
        incomeRenderer.setColor(Color.rgb(130, 130, 230));
        incomeRenderer.setFillPoints(true);
        incomeRenderer.setLineWidth(2);
        incomeRenderer.setDisplayChartValues(true);

        XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
        multiRenderer.setXLabels(0);
        multiRenderer.setBarSpacing(0.3f);
        multiRenderer.setBarWidth(30);
        multiRenderer.setChartTitle("Income Chart");
        multiRenderer.setXTitle("Year 2013");
        multiRenderer.setYTitle("Amount in Dollars");
        //multiRenderer.setZoomLimits(1.0,0.7,1.0,3000.0);
        multiRenderer.setZoomButtonsVisible(true);
        //multiRenderer.setZoomEnabled(true, true);
        //multiRenderer.setPanEnabled(true, true);
        multiRenderer.setInScroll(true);
        multiRenderer.setXAxisMin(0);
        multiRenderer.setXAxisMax(7);
        multiRenderer.setYAxisMin(0);
        multiRenderer.setYAxisMax(4000);
        multiRenderer.setClickEnabled(true);
        multiRenderer.setShowGridX(true);
        for (int i = 0; i < x.length; i++) {
            multiRenderer.addXTextLabel(i, mMonth[i]);
        }

        multiRenderer.addSeriesRenderer(incomeRenderer);
        return multiRenderer;
    }

}

ログ: java.lang.IndexOutOfBoundsException: 無効なインデックス 0、サイズは 0

java.util.ArrayList.throwIndexOutOfBoundsException (ArrayList.java:251) で

org.achartengine.renderer.DefaultRenderer.getSeriesRendererAt(DefaultRenderer.java:189) で

org.achartengine.chart.XYChart.draw(XYChart.java:240) で

org.achartengine.GraphicalView.onDraw (GraphicalView.java:168) で

4

2 に答える 2

2

このコードは私の折れ線グラフで機能します。

    v.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    SeriesSelection seriesSelection = ((GraphicalView) v)
                            .getCurrentSeriesAndPoint();

                    Log.d("sreedhu", String.valueOf(seriesSelection));
                    if (seriesSelection == null) {
                        Log.d("sreedhu", "Nothing Selected");

                    } else {
//your code}
}
}
于 2013-07-26T10:56:30.570 に答える
0

このコードを使用して、棒グラフをズームします...!

renderer.setScale((float) 1);
于 2013-07-26T10:17:27.640 に答える