1

aChartEngine に問題があります。ホーム画面のウィジェットにグラフを表示しようとしています。これまでのところ成功していませんが、問題は、ビットマップをコンテナーに入れると、コンテナーの幅に合わせて縮小され、ストレッチされないことです。更新中のデータがありますが、この画像のようです:

ここに画像の説明を入力

画像では、コンテナーとグラフがロードされたビットマップが部分的に塗りつぶされています。

このグラフが次のように (アクティビティに) 追加された場合、問題はありません。

GraphicalView graph = ChartFactory.getTimeChartView(context, getDataSet(dates, values, seriesTitle), getRenderer(context, lblAxisY), "HH:mm");
graphLayout.removeAllViews();
graphLayout.addView(graph, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));

グラフをビットマップに変換して返すと、間違っています:

float dpi = AndroidResolution.getScreenDpi(context);
        GraphicalView graph = ChartFactory.getTimeChartView(context, getDataSet(dates, values, seriesTitle), getRendererWidget(context,
                lblAxisY), "HH:mm");

        graph.setDrawingCacheEnabled(true);
        graph.layout((int) (0 * dpi), (int) (0 * dpi), (int) (100 * dpi), (int) (100 * dpi));
        graph.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
        graph.buildDrawingCache();
        graph.getDrawingCache();

        Bitmap bmp = Bitmap.createBitmap((int) (100 * dpi), (int) (100 * dpi), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bmp);
        graph.draw(canvas);

        return bmp;

レイアウトとビットマップ サイズのさまざまな値を試してみましたが、常に歪んだり縮小したりします。リモートビューなので、ビューの幅と高さを取得できません。

bmp を受け取る方法:

remoteView.setImageViewBitmap(R.id.imgRecentDetails, AndroidPlot.generateTimePlot(context, values, dates,"VALUES", "AXIS Y")));

レンダラー コード:

XYMultipleSeriesRenderer returningRenderer = new XYMultipleSeriesRenderer();
    returningRenderer.setApplyBackgroundColor(true);
    returningRenderer.setBackgroundColor(Color.argb(0, 0, 255, 0));
    returningRenderer.setMarginsColor(Color.argb(0, 0, 255, 0));
    returningRenderer.setGridColor(Color.argb(119, 128, 128, 128));
    returningRenderer.setShowGrid(true);
    returningRenderer.setShowLegend(false);
    returningRenderer.setAxisTitleTextSize(dpi * 3);
    returningRenderer.setChartTitleTextSize(dpi * 3);
    returningRenderer.setYLabels(5);
    returningRenderer.setXLabels(3);
    returningRenderer.setYTitle(lblAxisY);
    returningRenderer.setAntialiasing(true);
    returningRenderer.setYAxisMax(100);
    returningRenderer.setYAxisMin(0);
    returningRenderer.setYLabelsAlign(Align.RIGHT, 0);
    returningRenderer.setYLabelsColor(0, Color.WHITE);
    returningRenderer.setXLabelsColor(Color.WHITE);
    returningRenderer.setZoomEnabled(false);
    returningRenderer.setInScroll(true);
    returningRenderer.setPanLimits(new double[] { 0, 1000, 0, 0 });
    returningRenderer.setPanEnabled(true, false);
    XYSeriesRenderer renderer = new XYSeriesRenderer();
    renderer.setPointStyle(PointStyle.POINT);
    renderer.setColor(Color.WHITE);
    renderer.setFillBelowLine(true);
    renderer.setFillBelowLineColor(Color.argb(255, 23, 123, 189));
    returningRenderer.addSeriesRenderer(renderer);
    return returningRenderer;

洞察や解決策は大歓迎です。

更新: 通常のアクティビティでも試してみましたが、コンテナーの左上隅でも縮小されています (graph.toBitmap() を使用)。

4

1 に答える 1

1

で試してくださいreturningRenderer.setInScroll(false)

于 2012-11-20T17:47:23.937 に答える