我买了 Programming Android 这本书,对于他们在 Github ( https://github.com/bmeike/ProgrammingAndroid2Examples/tree/master/AndroidUIDemo ) 和他们的书中如何有不同的代码,这有点令人困惑和失望。我被困在一个示例中,该示例教如何在随机点绘制一个圆圈,并使用分配给按钮的颜色,例如,当我单击红色按钮时,它应该在视图中绘制一个红色圆圈。
我做了一些额外的代码,不知何故我设法让它工作。这是我的 onDraw 方法:
@Override
protected void onDraw(Canvas canvas)
{
paint.setStyle(Style.STROKE);
paint.setColor(hasFocus() ? Color.BLUE : Color.GRAY);
canvas.drawRect(0, 0, getWidth() - 1, getHeight() - 1, paint);
if (this.points == null) return;
paint.setStyle(Style.FILL);
for (Point p : points.getAllPoints())
{
paint.setColor(p.getColor());
canvas.drawCircle(p.getX(), p.getY(),
p.getDiameter(), paint);
}
}
有时它有效,有时无效,但当它有效时,它会画出一个又薄又大的椭圆形。
p.getDiameter()
总是6。即使我把它放到一个固定的6,效果是一样的。
另外,发生了一些奇怪的事情:如果我替换p.getY()
and p.getX()
, 50
它永远不会在屏幕上绘制任何东西。50 不应超出屏幕范围。
在下图中,您可以看到正在渲染的内容以及我用来创建视图的一些代码。
这是一些额外的相关代码。
设置pointView大小(我画点的地方):
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
pointView.setLayoutParams(new android.widget.LinearLayout.LayoutParams(root.getWidth(), root.getHeight()/2));
}
将 OnCLickListener 添加到按钮,因此当我单击它时,它应该画一个圆圈。
button1.setOnClickListener(new OnClickListener() //I'll not put the Red button here, for the sake of brevity.
{
@Override
public void onClick(View arg0)
{
makeDot(pointModel, pointView, Color.GREEN);
}
});
和 makeDot 方法:
private final Random rnd = new Random();
void makeDot(Points points, PointView pointView, int color)
{
points.addPoint(
rnd.nextFloat()*pointView.getWidth(),
rnd.nextFloat()*pointView.getHeight(),
color, POINT_DIAMETER /*always 6*/);
}
(我认为 POINT_DIAMETER 应该是 POINT_RADIUS 但现在还可以。)
那么,我怎样才能让它在屏幕的随机位置画一个圆呢?