簡體   English   中英

在Android中使用AchartEngine動態繪制折線圖時出現的問題

[英]Issues with when dynamically ploting the line graph using AchartEngine in android

這是我的班級樣子

import org.achartengine.ChartFactory;
    import org.achartengine.GraphicalView;
    import org.achartengine.model.XYMultipleSeriesDataset;
    import org.achartengine.model.XYSeries;
    import org.achartengine.renderer.XYMultipleSeriesRenderer;
    import org.achartengine.renderer.XYSeriesRenderer;
    import android.content.Context;
    import android.graphics.Color;
    import android.graphics.Paint.Align;

    public class ChartController {
        private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();
        private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
        public GraphicalView mChartView;
        private Context context;
        public boolean initialised;

        public static double xMin = 0;
        public static double xMax = 50;
        public static double yMin = 0;
        public static double yMax = 100;

        private static XYSeries series_1;

        public GraphicalView getmChartView() {
            return mChartView;
        }

        public PPSChartController(Context context) {
            super();
            initialised = false;
            this.context = context;

        }

        public void init(int argbColor, String name, XYSeries _series_1) {

            if (!FragmentDistance.Possible && ChartRecorder.distanceCovered > 0) {

                xMax = 50 * ChartRecorder.result;

            }
            else if (FragmentDistance.Possible) {
                xMax = ChartRecorder.distance;

            }
            series_1 = _series_1;
            mDataset.addSeries(0, series_1);

            int[] margins = { 0, 0, 0, 0 };

            mRenderer.setApplyBackgroundColor(true);
            mRenderer.setBackgroundColor(Color.TRANSPARENT);
            mRenderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));
            mRenderer.setLegendTextSize(50);
            mRenderer.setYLabelsAlign(Align.LEFT);
            mRenderer.setZoomButtonsVisible(false);
            mRenderer.setPanEnabled(false, false);
            mRenderer.setAntialiasing(true);
            mRenderer.setFitLegend(false);
            mRenderer.setShowLegend(false);
            mRenderer.setMargins(margins);
            mRenderer.setYAxisMin(0);
            mRenderer.setXAxisMin(0);
            mRenderer.setXAxisMax(xMax);
            mRenderer.setYAxisMax(yMax + 10);
            mRenderer.setShowGridY(false);
            mRenderer.setShowGridX(true);
            mRenderer.setGridColor(Color.GRAY);
            mRenderer.setInScroll(true);

            XYSeriesRenderer rendererSignal = new XYSeriesRenderer();
            rendererSignal.setColor(Color.CYAN);
            rendererSignal.setLineWidth(4);

            mRenderer.addSeriesRenderer(0, rendererSignal);

            mChartView = ChartFactory.getLineChartView(context, mDataset, mRenderer);
            mChartView.setClickable(true);
            initialised = true;

        }

        public void refresh() {
            mChartView.repaint();
        }

        public void clear() {
            series_1.clear();
        }

    }

ChartRecorder類

import org.achartengine.model.XYSeries;

import android.os.SystemClock;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.Toast;


public class ChartRecorder {

    public ChartController chartController;
    public static XYSeries sig_socCurve;
    public static int distance;
    int count = 0;
    public static int result;
    public static int distanceCovered;
    int soc;

    public void initChart() {
        if (chartController == null || !chartController.initialised) {
            chartController = new ChartController(ActivityMain.appContext);
            chartController.init(1, "PPS", sig_socCurve);
        }

    }

    public void resetChart() {
        if (chartController != null) {
            chartController.clear();
        }
    }

    public ChartRecorder() {

        chartController = new ChartController(ActivityMain.appContext);
        sig_socCurve = new XYSeries("SOCCurve");
    }

    public void handleSignal() {

        if (SomeCondition)) {

        }
        if (someCondition2)) {

            distance = 100;


            **if (someCondition) {
                if (againSomeCondition) {
                    result = someResult;
                    // here i am calling the init() method from ChartController 
                    chartController.init(1, "PPS", sig_socCurve);
                }
            } else if (someCondition) {
            // here i am calling the init() method from ChartController
                chartController.init(1, "PPS", sig_socCurve);
                count++;
            }**

            sig_socCurve.add(distanceCovered, soc);

        }

        if (ppsRecord != null) {
            // this calling every time so ther not a issue with repaint or refresh
            ppsRecord.chartController.refresh();
        }

    }

}

這是片段:

Here i have a fragment class 
 where based on the some  condition i am calling handleSignal() 
 for example


in OnCreateView() method i am calling 
initChart()  from ChartRecorder class

 if(someCondition) {
 handleSignal() from ChartRecorder class

 }

當我從ChartController類注釋以下代碼時,動態圖表正在工作

**if (someCondition) {
                if (againSomeCondition) {
                    result = someResult;
                    // here i am calling the init() method from ChartController 
                    chartController.init(1, "PPS", sig_socCurve);
                }
            } else if (someCondition) {
            // here i am calling the init() method from ChartController
                chartController.init(1, "PPS", sig_socCurve);
                count++;
            }**

為什么沒有發生任何線索...請提出一些想法

是的,我有解決問題的方法

這里在類init()中的ChartController.java類中,我正在設置xaxis值

 if (!FragmentDistance.Possible && ChartRecorder.distanceCovered > 0) {

                xMax = 50 * ChartRecorder.result;

            }
            else if (FragmentDistance.Possible) {
                xMax = ChartRecorder.distance;

            }

當我做內同樣的事情refresh()方法,它working.but不知道為什么它在刷新工作()方法不是在init()我打電話,每次repaint()設置后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM