我试着做自定义组件.我扩展了View课程并用onDraw覆盖方法做了一些绘图.为什么我需要覆盖onMeasure?如果我没有,一切都被证明是正确的.有人可以解释一下吗?我该怎么写我的onMeasure方法?我见过几个教程,但每个教程都有点不同.有时他们会super.onMeasure在最后打电话,有时他们会使用setMeasuredDimension而不是打电话.差异在哪里?
毕竟我想要使用几个完全相同的组件.我将这些组件添加到我的XML文件中,但我不知道它们应该有多大.我希望稍后设置它的位置和大小(为什么我需要在自定义组件类时设置大小,onMeasure如果在onDraw我绘制它时也是如此).什么时候我需要这样做?
是否有一种常见的方法来显示大图像并使用户能够放大和缩小图像?
到现在为止我找到了两种方法:
我已经创建了一个自定义视图,onDraw()覆盖了画布上的位图.当我在布局文件中指定我想要它wrap_content时,它仍然会填满整个屏幕.onMeasure()这样说:
measure的基类实现默认为背景大小,除非允许更大的大小
MeasureSpec.子类应覆盖onMeasure(int,int)以提供更好的内容测量.
好酷,所以我知道我需要覆盖onMeasure()和使用MeasureSpec.根据这个答案
unex表示layout_width或layout_height值设置为wrap_content.你可以任意大小.
现在我遇到了我的问题,我如何onMeasure()测量我尚未创建的位图并测量/包装它?我知道其他Android视图必须做一些事情,因为如果设置为wrap_content,它们不会阻挡整个屏幕.提前致谢!
我的listview项目由三列和三行组成.我使用TableLayout.列之间的空间不统一但我通过设置margin来管理.现在布局看起来很完美.
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/dp18"
android:paddingLeft="@dimen/dp16"
android:paddingTop="@dimen/dp18"
android:stretchColumns="0,1,2">
<TableRow>
..
</TableRow>
<TableRow>
..
</TableRow>
<TableRow>
..
</TableRow>
</TableLayout>
Run Code Online (Sandbox Code Playgroud)
但我想知道什么是理想的方法?如果我使用了四个LinearLayout(一个外部水平线性布局和三个内部垂直线性布局用于三列),那么在优化和性能方面会有什么不同.当TableRow扩展LinearLayout然后间接我只使用LinearLayout.
那么,使用单个TableLayout而不是多个LinearLayout有什么好处,因为TableRow只扩展了LinearLayout?