0

こんばんは、
私はアンドロイドアプリケーションを開発しており、sqliteデータベースへのクエリ後に取得した値をグラフ化するためにachartengineを使用しています。値が 0 から 1000 の場合、読み込み中のアイコンが表示され、10 秒後に必要なグラフが表示されます。値が 1000 を超えていて、複数行のプロットがある場合、決して離れないロード アイコンが表示されます。私が使用するコードを以下に示します。私は何か間違ったことをしていますか?achartengine のサンプル コードを使用して、独自のコードを作成しました。

コード:

    public void createGraph(Context ctx){
    // x data
    dateList = DateDataReturn(ctx , table, accessPointList_Filtered);
    Log.d(TAG,"dateList len:" + String.valueOf(dateList.size()));
    // y data
    dataList = yDataReturn(ctx, column, table, accessPointList_Filtered);
    Log.d(TAG, "dataList len:" + String.valueOf(dataList.size()));
    // y axis title
    yaxis = yAxisReturn(column);
    // lines titles
    titles = titleReturn(ctx, column, accessPointList_Filtered);
    Log.d(TAG,"titles length:" + String.valueOf(titles.length));
    // line colors
    colors = retColor(ctx, table, accessPointList_Filtered);
    Log.d(TAG,"colors length:" + String.valueOf(colors.length));
    // line point styles
    styles = retPointStyle(ctx, table, accessPointList_Filtered);
    Log.d(TAG,"style length:" + String.valueOf(styles.length));
    // x axis min value
    xmin = dateList.get(0)[0].getTime();
    Log.d(TAG, "1");
    // x axis max value
    xmax = dateList.get(0)[dateList.get(0).length - 1].getTime();
    Log.d(TAG, "2");
    // Create the renderer
    renderer = buildRenderer(colors, styles);
    // Create the dataset
    dataset = buildDateDataset(titles, dateList, dataList);
    Log.d(TAG, "3");
    for (int i = 0; i < renderer.getSeriesRendererCount(); i++) {
        ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);
    }

    setChartSettings(renderer, // POINTS
            "Interface Monitoring", // PLOT LABEL
            "Time", // X LABEL
            yAxisTitleReturn(column), // Y LABEL
            xmin, 
            xmax, 
            yaxis[0], // Y AXIS START VALUE
            yaxis[1], // Y AXIS FINISH VALUE
            Color.LTGRAY, // AXIS COLOR
            Color.LTGRAY); // LABELS COLOR

    renderer.setXLabels(10);
    renderer.setYLabels(10);
    renderer.setBackgroundColor(Color.BLACK);
    renderer.setApplyBackgroundColor(true);
    renderer.setXLabelsAlign(Align.CENTER);
    renderer.setYLabelsAlign(Align.RIGHT);
    renderer.setShowGrid(true);
    renderer.setZoomEnabled(true, true);
    renderer.setPanEnabled(true, true);
}


/**
 * 
 * @param context
 * @return GraphicalView, returns the view
 */
public GraphicalView getView(Context context) {
    return (GraphicalView)ChartFactory.getTimeChartView(context, dataset, renderer, "h:mm:ss a");   
}

ありがとう

4

1 に答える 1

0

グラフに多くの値を追加することが予想される場合は、詳細レベルを下げる必要があります。これは、ほとんどの時間がレンダリングに費やされているためです。したがって、ここを改善することができます。

  • アンチエイリアシングを無効にするrenderer.setAntialiasing(false);
  • PointStylesを使用しないでください

その他の提案:

  • 表示するデータのみをモデルに追加します。非常に多くのポイントを持つチャートはどのように見えますか?

また、1.1.0 バージョンには一連のパフォーマンス改善が含まれています。このバージョンはここからダウンロードできます。

于 2013-02-28T08:33:43.463 に答える