Android新手 - 在运行时绘制视图

时间:2010-03-29 16:01:43

标签: xml android view runtime draw

全部,

我刚刚开始为Android开发。我正在寻找移植我的一个iPhone应用程序,但我有点不知道如何在运行时绘制一个视图(一个未在XML中声明的视图)。基本上,我想画一个简单的矩形,但之后能够在绘制后操纵它的框架。

很抱歉,如果这是一个非常非常简单的问题,但我似乎无法在这里找到一些与iPhone SDK相同的内容。

提前致谢!

1 个答案:

答案 0 :(得分:7)

听起来你想尝试2D图形 - 为此,你应该使用Canvas。您可以通过invalidate()方法控制画布的绘制,该方法告诉Android重新绘制触发自定义onDraw()方法的整个内容。您提到不想使用XML文件,但这是放入Canvas的最简单方法 - 您不必在XML文件中定义其内容,只需告诉布局文件即可。将Canvas放入应用程序的一种强大而简单的方法是自定义视图。例如,在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()时,视图将被重绘,矩形向下和向右移动2px。注意:重绘只发生在主线程'等待'的情况下。换句话说,如果您有多次循环调用invalidate,则在循环结束之前实际上不会绘制视图。你可以解决这个问题,但这会增加更多复杂性。有关如何完成的示例,请查看来自Google的LunarLander示例游戏 - 它是一个简单的游戏,演示自定义视图,2个线程以及如何实现连续动画。