我对 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())。