我有一个继承自ImageView的类叫做FractalView。我的目标是使用该类绘制一个尺寸为整个屏幕的分形图案。它是我的活动布局文件中唯一的视图,除了顶级LinearLayout之外:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFFFF">
<com.antonc.fractal_wallpaper.FractalView
android:id="@+id/fractal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"/>
</LinearLayout>
可以看到,我正在使用"match_parent"将FractalView和LinearLayout的layout_width和layout_height都设置为相同值。此时,我假设FractalView的大小已经设置为一定的值,因为它与其父布局匹配,而父布局又与其父布局(整个屏幕)匹配。 接下来,我尝试使用getWidth()和getHeight()来检测可用于FractalView的大小:
public class FractalView extends ImageView {
private Context mContext;
private Handler mHandler;
private int mScrWidth;
private int mScrHeight;
public FractalView(Context context) {
super(context);
mContext = context;
init();
}
private void init() {
mScrWidth = getWidth();
mScrHeight = getHeight();
// Breakpoint
}
@Override
protected void onDraw(Canvas canvas) {
[...]
}
}
但是当我的代码到达断点时,调试器显示mScrWidth和mScrHeight为零。我尝试使用getMeasuredWidth()和getMaxWidth(),但它们也返回不正确的值。我读了几个类似问题的答案,比如这个,它们都解释了getWidth()返回图像绘制后的大小,而实际上我需要的是该视图可用宽度,在开始绘制之前。
有没有一种方法可以检索宽度和高度的这些值?