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() を使用)。