Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Android新增功能-在运行时绘制视图_Xml_Android_View_Runtime_Draw - Fatal编程技术网

Xml Android新增功能-在运行时绘制视图

Xml Android新增功能-在运行时绘制视图,xml,android,view,runtime,draw,Xml,Android,View,Runtime,Draw,大家好 我刚刚开始为Android开发。我想移植我的一个iPhone应用程序,但对于如何在运行时绘制视图(一个未在XML中声明的视图)我有点不知所措。基本上,我想画一个简单的矩形,但在画完之后可以操纵它的框架 如果这是一个非常非常简单的问题,很抱歉,但是我在这里找不到与iphonesdk等价的东西 提前谢谢 听起来你想尝试2D图形-为此,你应该使用画布。您可以通过invalidate()方法控制画布的绘制,该方法告诉Android重新绘制整个画布,从而触发定制的onDraw()方法。您提到不想使

大家好

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

如果这是一个非常非常简单的问题,很抱歉,但是我在这里找不到与iphonesdk等价的东西


提前谢谢

听起来你想尝试2D图形-为此,你应该使用
画布
。您可以通过
invalidate()
方法控制画布的绘制,该方法告诉Android重新绘制整个画布,从而触发定制的
onDraw()
方法。您提到不想使用XML文件,但这是放在画布中最简单的方法-您不必在XML文件中定义其内容,只需告诉布局文件它就在那里。在应用程序中放置画布的一种强大但简单的方法是自定义视图。例如,在XML文件中包含
元素。然后声明
CustomView扩展视图
类。要绘制任何类型的图形,请输入onDraw()方法

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

//首先定义矩形轮廓的颜色
矩形绘制=新绘制();
setARGB(255,255,0,0);
矩形油漆。设置行程宽度(2);
矩形绘制.设置样式(样式.笔划);
//然后自己创建一个矩形
矩形=新矩形(左、上、右、下)//以像素为单位
//这是一个onDraw()示例
@凌驾
公共空白onDraw(画布){
矩形。偏移量(2,2);
画布.drawRect(矩形、矩形绘制);
}
每次从程序中调用invalidate()时,视图将被重新绘制,矩形将向下和向右移动2倍。注意:重绘仅在主线程为“等待”时发生。换句话说,如果有一个循环多次调用invalidate,那么在循环完成之前,实际上不会绘制视图。你可以绕过这个问题,但这会增加更多的复杂性。关于如何实现的示例,请看谷歌的LunarLander示例游戏-这是一个简单的游戏,演示了自定义视图、两个线程以及如何实现连续动画