使用Android绘制自定义视图
我在我的应用程序中绘制了一个自定义视图,它基本上以参数(XML)作为文本来显示,然后继续无限旋转它 当我进行此控制时,我有一些疑问,我想问:使用Android绘制自定义视图,android,Android,我在我的应用程序中绘制了一个自定义视图,它基本上以参数(XML)作为文本来显示,然后继续无限旋转它 当我进行此控制时,我有一些疑问,我想问: 我在attrs.xml文件中声明了两个可设置样式的属性。这些属性用于设置控件中使用的圆的宽度和宽度。我将在ondraw方法和onmeasure方法中使用这些值。我运行程序时只声明了这些属性,但出现了一个错误,要求我输入android:width和android:height属性。我的问题是,如果我已经在使用自定义属性定义视图的高度和宽度,为什么需要这些属
- 我在
文件中声明了两个可设置样式的属性。这些属性用于设置控件中使用的圆的宽度和宽度。我将在ondraw方法和onmeasure方法中使用这些值。我运行程序时只声明了这些属性,但出现了一个错误,要求我输入attrs.xml
属性。我的问题是,如果我已经在使用自定义属性定义视图的高度和宽度,为什么需要这些属性android:width和android:height
- 我在mac电脑上编码。现在,当我制作
文件时,通常通过ctrl+space获得的自动完成列表并没有显示出来。这是为什么。例如,我想知道我可以为自定义属性的format属性指定哪些值,就像我在下面演示的那样:attrs.xml
。为什么自动完成没有出现?当我制作一个.java文件时,它确实会弹出 - 在我的
方法中,我想画一个圆。现在我需要圆心的坐标。所以我要做的就是把0,0。但这是不对的。我希望圆位于其所在父视图的中心。因此,如果我的观点是层次结构,我希望它尊重这一点。我想给出相对于父视图的坐标。现在发生的事情是,它被绘制在我屏幕的左上角。这是我不想要的。我该怎么做才能做到这一点ondraw()
void onDraw(Canvas canvas)
{
int centerX = this.getWidth() / 2;
int centerY = this.getHeight()) / 2;
//..draw code here
}
编辑下面是一个源代码示例,应该会有所帮助:谢谢您的回复。现在,当我执行这个.getWidth()时,我确实需要注意我使用的密度,对吗?在XML中,dip有一个很好的规定,我可以硬编码单元,有没有类似的方法通过代码来做事情?同样,当我在上面的方法中谈到画布时,它包括整个屏幕,或者我的视图所在的屏幕部分?@user590849 GetWidth已经处理了密度,如果在onMeasure()中正确处理密度。另外,我看到的一个建议是在onDraw()中调用canvas.scale(),并将比例设置为1.0到1.0,以便1.0是视图的宽度/高度。那么所有的尺寸都是实际视图尺寸。好的。这是个好建议。但是当你说我必须用测量方法来处理这个问题时,我该怎么做呢。实际上,当我通过代码进行操作时,我不知道如何处理屏幕独立性。使用XML时我很清楚。@user590849我认为所有的onMeasure dimmensions都是dip单位,但我不确定。请查看这个带有源代码的示例,以获得进一步的建议。