xml - Android 新手 - 在运行时绘制 View

标签 xml android view runtime draw

大家好,

我刚刚开始为 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类(class)。任何你想做的绘图,放在 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。注意:重绘仅在主线程处于“等待”状态时发生。换句话说,如果您有一个多次调用 invalidate 的循环,则在循环完成之前不会实际绘制 View。您可以解决这个问题,但这会增加更多的复杂性。有关如何完成的示例,请查看 Google 的 LunarLander 示例游戏 - 这是一个演示自定义 View 、2 个线程以及如何实现连续动画的简单游戏。

关于xml - Android 新手 - 在运行时绘制 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2539396/

相关文章:

xml - 如何更改 Excel XML 数据导出的缩进?

c# - 如何将字符串反序列化为类?

java - 设置命令行构建的 debug.keystore 位置,无需重写 Ant 目标

android - 仅在 2.4Ghz 频段扫描 wifi 信号

objective-c - Cocoa 合并自定义 View

drupal-6 - Drupal Views 将每个分类限制的最新内容显示到一个节点

java - 读取格式不正确的 XML 时出现 SAX 错误

xml - 如何使用 XSL 在 href 中查找具有特定关键字的 <a> 元素?

android - Gradle 和多个具有 Roboguice 依赖项的项目

iphone - 推送/呈现模态视图 Controller