getHeight () из не завышенного пользовательского представления возвращает 0 - PullRequest
0 голосов
/ 14 мая 2019

Что я хочу, чтобы преобразовать вид в растровое изображение, для которого мне нужны высота и ширина корневого представления.getMeasuredHeight и getMeasuredWidth возвращает 0, передано Представление допустимо, но не возвращает высоту и ширину,

Как получить действительные высоту и ширину без надуванияПользовательский класс View , использующий только Java-экземпляр объекта Custom View.

Я использую следующий фрагмент кода для получения высоты и ширины представления:

/**
     * Return the width of view.
     *
     * @param view The view.
     * @return the width of view
     */
    public static int getMeasuredWidth(final View view) {
        return measureView(view)[0];
    }

    /**
     * Return the height of view.
     *
     * @param view The view.
     * @return the height of view
     */
    public static int getMeasuredHeight(final View view) {
        return measureView(view)[1];
    }

    /**
     * Measure the view.
     *
     * @param view The view.
     * @return arr[0]: view's width, arr[1]: view's height
     */
    public static int[] measureView(final View view) {
        ViewGroup.LayoutParams lp = view.getLayoutParams();
        if (lp == null) {
            lp = new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT
            );
        }
        int widthSpec = ViewGroup.getChildMeasureSpec(0, 0, lp.width);
        int lpHeight = lp.height;
        int heightSpec;
        if (lpHeight > 0) {
            heightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight, View.MeasureSpec.EXACTLY);
        } else {
            heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        }
        view.measure(widthSpec, heightSpec);
        return new int[]{view.getMeasuredWidth(), view.getMeasuredHeight()};
    }

1 Ответ

0 голосов
/ 14 мая 2019

Свойства измерения не заполняются до тех пор, пока вид не будет раздут и нарисован.Единственный способ получить свойства - это либо жестко задать значения, получить размеры из View.LayoutParams, если они имеют размеры, отличные от WRAP_CONTENT или MATCH_PARENT, либо получить эти свойства после onCreate () в Activity или onViewCreated () дляфрагмент.

Если вы хотите преобразовать представление в растровое изображение, вы можете нарисовать это представление на экране (оно может быть невидимым для пользователя) и перейти оттуда.

...