我不确定我是否以“正确”的方式这样做,所以我也对其他选择持开放态度。这就是我想要实现的目标:
我想要一个包含图表的视图。该图表应该由应用程序本身动态创建。图表应该是可缩放的,并且一开始可能会比屏幕大(800x600 左右)
我打算从简单的开始,只是一个散点图。最终,我想要一个带有拟合线和误差条的散点图,当图表缩放时,误差条的轴保留在屏幕上......所以这可能意味着三个图像叠加在一起,并带有缩放功能。
我已经构建了一个可以绘制的视图,可以使用聚焦缩放和拖动,可以自动缩放图像,可以动态切换图像,并且可以获取大于屏幕的图像。将图像捆绑在一起应该不是问题。
但是,我无法弄清楚如何动态绘制简单的图像。
例如:我是否获取一个 BitMap 对象并在其上逐像素绘制?我想使用一些 ShapeDrawables,但它们似乎只能在画布上绘制形状......那么我如何将所有这些形状的位图放入我的视图中?或者,我是否必须在每次移动或缩放时动态重绘我想要在视图的“onDraw”例程中描绘的/所有/图像?
我认为“完美”的解决方案是使用 ShapeDrawable (或类似的东西来绘制线条并标记它们)通过视图的 onDraw 方法绘制轴...使它们保持最新并处于正确的级别...然后覆盖可以缩放和移动的数据点/拟合曲线/等的预先生成的图像。在图形图像上将白色设置为 alpha 应该可以实现这一点。
PS:图形图像在视图上实际上不应该/改变/。它只是缩放并被拖动。轴实际上可能会随着运动而改变。因此,在进入视图之前(或立即)预先生成图表将是最佳选择。但我也注意到缩放对于矢量图像非常有效......这听起来也很合适(而不是位图?)。
所以我正在寻找一些一般指导。尝试阅读 BitMap、ShapeDrawable、Drawable 等类,但似乎找不到合适的。这让我觉得我找错了方向,有更多经验的人可以为我指明正确的方向。希望我没有浪费时间构建昨天整理的可缩放视图:)。
首先,如果你从中学到了一些东西,那么编写代码绝不是浪费时间。 :-)
不幸的是,Android 中仍然不支持绘制矢量图像。所以你得到的是位图。
我认为您缺少的一点是您可以随时在位图上绘图时创建画布。你不必等待 onDraw 给你一个。
因此,在某个时刻(从 onCreate 开始,当数据更改等时),创建您自己的任意大小的位图。
这是一些伪代码(未经测试)
Bitmap mGraph;
void init() {
// look at Bitmap.Config to determine config type
mGraph = new Bitmap(width, height, config);
Canvas c = new Canvas(mybits);
// use Canvas draw routines to draw your graph
}
// Then in onDraw you can draw to the on screen Canvas from your bitmap.
protected void onDraw(Canvas canvas) {
Rect dstRect = new Rect(0,0,viewWidth, viewHeight);
Rect sourceRect = new Rect();
// do something creative here to pick the source rect from your graph bitmap
// based on zoom and pan
sourceRect.set(10,10,100,100);
// draw to the screen
canvas.drawBitmap(mGraph, sourceRect, dstRect, graphPaint);
}
希望有点帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)