使用Android绘制自定义视图

时间:2011-06-03 11:08:03

标签: android

我在我的应用程序中绘制一个自定义视图,它基本上将参数(XML)作为要显示的文本,然后继续无限地旋转它。

当我进行这种控制时,我有一些疑问,我想问:

  • 我已经制作了两个我在attrs.xml文件中声明的可设置属性。这些属性用于设置控件中使用的圆的宽度和宽度。我将在ondraw方法和onmeasure方法中使用这些值。我通过声明这些来运行我的程序,但是有一个错误要求我放置android:width and android:height属性。我的问题是,如果我已经使用自定义属性来定义视图的高度和宽度,为什么我需要这些

  • 我在mac上编码。现在当我创建我的attrs.xml文件时,获取我们通常通过ctrl + space得到的自动完成列表没有显示出来。这是为什么。例如,我想知道我可以给出我的自定义属性的格式属性的值,就像我在下面说明的那样: <attr name ="somename" format="value I wanted to find out through autocomplete">。为什么自动完成没有弹出?当我制作a.java文件时会弹出它。

  • 在我的ondraw()方法中,我想绘制一个圆圈。现在为此,我需要圆心的坐标。所以我做的是把0,0。但这不正确。我希望圆圈位于它所在的父视图的中心。所以如果我的视图在层次结构中,我希望它尊重它。我想给出相对于父视图的坐标。现在发生的事情是它被绘制在屏幕的左上角。这是我不想要的。我该怎么做才能做到这一点?

1 个答案:

答案 0 :(得分:9)

  

如果我已经使用自定义属性来定义视图的高度和宽度,为什么还需要这些?

这是因为Android需要知道如何以及在何处将视图放入布局中。您可以通过覆盖View.onMeasure()来实现视图以使用自定义高度/宽度要求,以返回您自己的大小参数。然后,您只需在布局文件中设置android:layout_width="wrap_content" android:layout_height="wrap_content"

  

为什么自动完成没有弹出?当我制作a.java文件时会弹出它。

Android xml文件的自动完成和autodoc实现充其量是不稳定的,所以它不起作用并不奇怪。我不知道修复和AFAIK这是一个IDE错误。

  

在我的ondraw()方法中,我想绘制   一个圆圈。现在为此,我需要   中心的坐标   圈。所以我做的是把0,0。但是   这是不正确的。我想要圆圈   位于父视图的中心   它是在。所以如果我的观点是在   层次结构我希望它尊重这一点。一世   想让坐标相对   到父视图。发生了什么   现在是它被吸引了   我屏幕的左上角。这个   是我不想要的。我该怎么做   实现这个目标?

如果您正确实现了onMeasure(),则应该已经处理了相对于父级的坐标。要获得视图的中心,请使用以下代码:

void onDraw(Canvas canvas)
{
int centerX = this.getWidth() / 2;
int centerY = this.getHeight()) / 2;
//..draw code here
}

修改
以下是源代码应该有用的示例:http://mindtherobot.com/blog/272/android-custom-ui-making-a-vintage-thermometer/