大家好,

我刚刚开始为Android开发。我正在寻求移植我的iPhone应用程序之一,但是对于如何在运行时绘制 View (XML中未声明的 View )感到有些困惑。基本上,我想绘制一个简单的矩形,但是在绘制之后能够操纵其框架。

抱歉,这是一个非常非常简单的问题,但是我似乎在这里找不到与iPhone SDK等效的问题。

提前致谢!

最佳答案

听起来您想尝试2D图形-为此,您应该使用Canvas。您可以通过invalidate()方法控制Canvas的绘制,该方法告诉Android重新绘制整个内容,从而触发您的自定义onDraw()方法。您提到不想使用XML文件,但这是放入Canvas的最简单方法-您不必在XML文件中定义其内容,而只需告诉布局文件在其中即可。将Canvas放入应用程序中的一种强大而简单的方法是自定义 View 。例如,在您的XML文件中包括一个<your.package.CustomView android:.../>元素。然后声明CustomView extends View类。您想做的任何类型的绘图都放在onDraw()方法中。

例如,要绘制一个矩形,请执行以下操作。

//First you define a colour for the outline of your rectangle
rectanglePaint = new Paint();
rectanglePaint.setARGB(255, 255, 0, 0);
rectanglePaint.setStrokeWidth(2);
rectanglePaint.setStyle(Style.STROKE);

//Then create yourself a Rectangle
Rect rectangle = new Rect(left, top, right, bottom) //in pixels

//And here's a sample onDraw()
@Override
public void onDraw(Canvas canvas){
    rectangle.offset(2, 2);
    canvas.drawRect(rectangle, rectanglePaint);
}

每次从程序中调用invalidate()时,都会重新绘制 View ,并且矩形向右下方移动2px。注意:重绘仅在主线程为“waiting”时发生。换句话说,如果您有一个循环多次调用了invalidate,则在循环完成之前,实际上不会绘制View。您可以解决这个问题,但这会增加更多的复杂性。有关如何完成此操作的示例,请查看Google提供的LunarLander示例游戏-这是一个简单的游戏,演示了自定义View,2个线程以及如何实现连续动画。

10-01 03:46
查看更多