getWidth () zwraca 0, jeśli ustawione przez android: layout_width = „match_parent”

Mam klasę o nazwie FractalView, która rozszerza ImageView. Moim celem jest narysowanie fraktali z tą klasą, która ma rozmiar całego ekranu. Jest to jedyny widok w pliku układu mojej aktywności, inny niż LinearLayout najwyższego poziomu:

<?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>

Jak widać, używam „match_parent” zarówno dla layout_width, jak i layout_height zarówno FractalView, jak i LinearLayout. W tym momencie założyłem, że rozmiar FractalView jest ustawiony na pewną wartość, ponieważ pasuje do jego rodzica, który pasuje do jego rodzica (który jest całym ekranem). Następnie próbuję wykryć rozmiar, który jest dostępny dla FractalView, używając getWidth () i getHeight ():

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) {
    [...]
}

}

Ale kiedy mój kod osiągnie punkt przerwania, debuger pokazuje, że mScrWidth i mScrHeight są zerowe. Próbowałem użyć getMeasuredWidth () i getMaxWidth (), ale zwracają także niepoprawne wartości. Przeczytałem kilka odpowiedzi na podobne pytania, tj.ten i wszyscy wyjaśniają, że getWidth () zwraca rozmiar obrazupo został narysowany, a to, czego potrzebuję, to szerokość obszaru, który jest dostępny dla tego widoku,przed Zaczynam rysować.

Czy istnieje sposób na pobranie takich wartości dla szerokości i wysokości?

questionAnswers(2)

yourAnswerToTheQuestion