【问题标题】:New to Android - Drawing a view at runtimeAndroid 新手 - 在运行时绘制视图
【发布时间】:2011-02-02 02:55:27
【问题描述】:

大家好,

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

对不起,如果这是一个非常非常简单的问题,但我似乎无法在这里找到与 iPhone SDK 等效的东西。

提前致谢!

【问题讨论】:

    标签: xml android view runtime draw


    【解决方案1】:

    听起来您想尝试使用 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() 时,都会重新绘制视图并且矩形向下和向右移动 2px。注意:重绘仅在主线程“等待”时发生。换句话说,如果您有一个循环多次调用 invalidate,则在循环结束之前不会真正绘制视图。你可以解决这个问题,但这会增加更多的复杂性。有关如何完成此操作的示例,请查看 Google 的 LunarLander 示例游戏 - 这是一个简单的游戏,展示了自定义视图、2 个线程以及如何实现连续动画。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多