使用 android 小部件未显示 X 和 Y 轴标签
X and Y axis labels are not shown using android widget
我想使用 androidplot 在 android 小部件内显示绘图。实际上,小部件的主要内容应该显示情节。我的问题是我根本看不到 x- 和 y- tic-labels。 (不过,我可以设置并查看总体范围标签,例如 "temperature in °C")。
以下是相关代码部分(实际上是在 Kotlin 中而不是在 Java 中):
val plot = XYPlot(context, "Historyplot")
plot.setRangeLabel("Temp. in Grad")
plot.setDomainLabel("Zeit")
plot.title.labelPaint.textSize = 20f
plot.rangeTitle.labelPaint.textSize = 20f
plot.domainTitle.labelPaint.textSize = 20f
plot.legend.isVisible = false
plot.setBackgroundColor(Color.TRANSPARENT)
val h = appWidgetManager.getAppWidgetOptions(appWidgetId).getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT)
val w = appWidgetManager.getAppWidgetOptions(appWidgetId).getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH)
plot.setPlotMargins(10f, 10f, 10f, 10f)
plot.layout(0, 0, w, h)
val history = mutableListOf<Double>()
for (dataPoint in sensorHist) {
history.add(dataPoint.value ?: Double.NaN)
}
val series = SimpleXYSeries(history, SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "")
val seriesFormat = LineAndPointFormatter(Color.BLACK, Color.BLACK, Color.LTGRAY, null)
plot.addSeries(series, seriesFormat)
val bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
plot.draw(Canvas(bitmap))
views.setImageViewBitmap(R.id.plot_widget_img, bitmap)
appWidgetManager.updateAppWidget(appWidgetId, views)
这是它目前的样子(包括小部件左上角和右上角的另外两个小部件元素):
我尝试了很多不同的方法来使 tic-labels 可见,但其中 none 有效(setRangeOriginLinePaint(Color.BLACK), series.useImplicitXVals(), setLineLabelEdges(), setRangeStep(), setDomainStep(), setLinesPerRangeLabel()
,...)
难道 x-any y-tics 在 android 小部件中不起作用?还是我遗漏了什么?
更新
谢谢,@Nick,我添加了行
plot.graph().setLineLabelEdges(XYGraphWidget.Edge.LEFT, XYGraphWidget.Edge.BOTTOM)
这是它的样子(我添加了红色箭头作为视觉指南):
朝正确方向迈出的一步!我现在如何操作字体样式,更重要的是,如何使整个标签可见?我试过 plot.layoutManager.addToTop()
但只能找到 x 和 y 的标题,而不能找到标签本身。
通过添加以下内容,我能够让标签显示在 DemoApp 的(非常过时的)小部件示例中:
plot.getGraph().setLineLabelEdges(XYGraphWidget.Edge.LEFT, XYGraphWidget.Edge.BOTTOM);
它并不漂亮,但它是一个开始:
我看到你已经试过了,但据我所知,这就是你所缺少的。
对您更新的回应
您可以像这样调整标签的位置和颜色:
plot.getGraph().setLineLabelEdges(XYGraphWidget.Edge.LEFT, XYGraphWidget.Edge.BOTTOM);
plot.getGraph().getLineLabelInsets().setLeft(PixelUtils.dpToPix(16));
plot.getGraph().getLineLabelInsets().setBottom(PixelUtils.dpToPix(4));
plot.getGraph().getLineLabelStyle(XYGraphWidget.Edge.LEFT).getPaint().setColor(Color.RED);
产生:
之后是调整绘图/图形边距等的问题。
我想使用 androidplot 在 android 小部件内显示绘图。实际上,小部件的主要内容应该显示情节。我的问题是我根本看不到 x- 和 y- tic-labels。 (不过,我可以设置并查看总体范围标签,例如 "temperature in °C")。
以下是相关代码部分(实际上是在 Kotlin 中而不是在 Java 中):
val plot = XYPlot(context, "Historyplot")
plot.setRangeLabel("Temp. in Grad")
plot.setDomainLabel("Zeit")
plot.title.labelPaint.textSize = 20f
plot.rangeTitle.labelPaint.textSize = 20f
plot.domainTitle.labelPaint.textSize = 20f
plot.legend.isVisible = false
plot.setBackgroundColor(Color.TRANSPARENT)
val h = appWidgetManager.getAppWidgetOptions(appWidgetId).getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT)
val w = appWidgetManager.getAppWidgetOptions(appWidgetId).getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH)
plot.setPlotMargins(10f, 10f, 10f, 10f)
plot.layout(0, 0, w, h)
val history = mutableListOf<Double>()
for (dataPoint in sensorHist) {
history.add(dataPoint.value ?: Double.NaN)
}
val series = SimpleXYSeries(history, SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "")
val seriesFormat = LineAndPointFormatter(Color.BLACK, Color.BLACK, Color.LTGRAY, null)
plot.addSeries(series, seriesFormat)
val bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
plot.draw(Canvas(bitmap))
views.setImageViewBitmap(R.id.plot_widget_img, bitmap)
appWidgetManager.updateAppWidget(appWidgetId, views)
这是它目前的样子(包括小部件左上角和右上角的另外两个小部件元素):
我尝试了很多不同的方法来使 tic-labels 可见,但其中 none 有效(setRangeOriginLinePaint(Color.BLACK), series.useImplicitXVals(), setLineLabelEdges(), setRangeStep(), setDomainStep(), setLinesPerRangeLabel()
,...)
难道 x-any y-tics 在 android 小部件中不起作用?还是我遗漏了什么?
更新
谢谢,@Nick,我添加了行
plot.graph().setLineLabelEdges(XYGraphWidget.Edge.LEFT, XYGraphWidget.Edge.BOTTOM)
这是它的样子(我添加了红色箭头作为视觉指南):
朝正确方向迈出的一步!我现在如何操作字体样式,更重要的是,如何使整个标签可见?我试过 plot.layoutManager.addToTop()
但只能找到 x 和 y 的标题,而不能找到标签本身。
通过添加以下内容,我能够让标签显示在 DemoApp 的(非常过时的)小部件示例中:
plot.getGraph().setLineLabelEdges(XYGraphWidget.Edge.LEFT, XYGraphWidget.Edge.BOTTOM);
它并不漂亮,但它是一个开始:
我看到你已经试过了,但据我所知,这就是你所缺少的。
对您更新的回应
您可以像这样调整标签的位置和颜色:
plot.getGraph().setLineLabelEdges(XYGraphWidget.Edge.LEFT, XYGraphWidget.Edge.BOTTOM);
plot.getGraph().getLineLabelInsets().setLeft(PixelUtils.dpToPix(16));
plot.getGraph().getLineLabelInsets().setBottom(PixelUtils.dpToPix(4));
plot.getGraph().getLineLabelStyle(XYGraphWidget.Edge.LEFT).getPaint().setColor(Color.RED);
产生:
之后是调整绘图/图形边距等的问题。