我需要画出这样的东西:
我希望this guy发布一些代码,说明他是如何开始划分他的分段圈的,但唉他没有。
我还需要知道在与车轮交互后哪个段在哪里 - 例如,如果车轮旋转,我需要知道旋转动作后原始段的位置。
两个问题:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
修改
好的,所以我已经弄清楚如何 draw the segmented circle 使用Canvas
(我会将代码作为答案发布)。我相信我会很快弄清楚如何旋转圆圈。但是我仍然不确定在旋转动作之后我将如何识别出绘制轮的单独部分。
因为,我正在考虑做的是使用这些楔形绘制分段圆,以及当我想要旋转它时将整个Canvas
作为ImageView
进行处理,就好像它在旋转一样。但是当旋转停止时,我如何区分Canvas
上绘制的原始段?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我已经了解了如何绘制segment on its own(here also),OpenGL,Canvas甚至drawing shapes and layering them,但我还没有看到某人解释如何识别单独的细分。
可以使用drawBitmap()
或createBitmap()
吗?
如果我使用OpenGL,我可能会使用OpenGL's rotation 旋转分段滚轮,对吧?
我还读到OpenGL可能对我想做的事情太强大了,所以我应该考虑“the graphic components of a game library built on top of OpenGL”吗?
答案 0 :(得分:1)
这种答案是我上面的第一个问题 - 如何使用Android Canvas
绘制分段圈:
使用code found here,我在onDraw
函数中执行此操作:
// Starting values
private int startAngle = 0;
private int numberOfSegments = 11;
private int sweepAngle = 360 / numberOfSegments;
@Override
protected void onDraw(Canvas canvas) {
setUpPaint();
setUpDrawingArea();
colours = getColours();
Log.d(TAG, "Draw the segmented circle");
for (int i = 0; i < numberOfSegments; i++) {
// pick a colour that is not the previous colour
paint.setColor(colours.get(pickRandomColour()));
// Draw arc
canvas.drawArc(rectF, startAngle, sweepAngle, true, paint);
// Set variable values
startAngle -= sweepAngle;
}
}
这是我根据设备的屏幕尺寸设置绘图区域的方法:
private void setUpDrawingArea() {
Log.d(TAG, "Set up drawing area.");
// First get the screen dimensions
Point size = new Point();
Display display = DrawArcActivity.this.getWindowManager().getDefaultDisplay();
display.getSize(size);
int width = size.x;
int height = size.y;
Log.d(TAG, "Screen size = "+width+" x "+height);
// Set up the padding
int paddingLeft = (int) DrawArcActivity.this.getResources().getDimension(R.dimen.padding_large);
int paddingTop = (int) DrawArcActivity.this.getResources().getDimension(R.dimen.padding_large);
int paddingRight = (int) DrawArcActivity.this.getResources().getDimension(R.dimen.padding_large);
int paddingBottom = (int) DrawArcActivity.this.getResources().getDimension(R.dimen.padding_large);
// Then get the left, top, right and bottom Xs and Ys for the rectangle we're going to draw in
int left = 0 + paddingLeft;
int top = 0 + paddingTop;
int right = width - paddingRight;
int bottom = width - paddingBottom;
Log.d(TAG, "Rectangle placement -> left = "+left+", top = "+top+", right = "+right+", bottom = "+bottom);
rectF = new RectF(left, top, right, bottom);
}
那个(以及其他很直接的功能,所以我不打算在这里粘贴代码)得出这个: 每次运行时段都是不同的颜色。