@jusalex

Куда пропадает Custom View после выключения/включения экрана?

Сделал простой класс DressView, расширяющий View. В методе onDraw нарисовал два прямоугольника и вырезал один из другого:

paint.setColor(Color.RED);
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.FILL_AND_STROKE);

        path.moveTo(0, 0);
        path.lineTo(metrics.widthPixels, 0);
        path.lineTo(metrics.widthPixels, metrics.heightPixels);
        path.lineTo(0, metrics.heightPixels);
        path.close();

        path.moveTo(100, 100);
        path.lineTo(metrics.widthPixels - 100, 100);
        path.lineTo(metrics.widthPixels - 100, metrics.heightPixels - 200);
        path.lineTo(100, metrics.heightPixels - 200);
        path.close();

        path.setFillType(Path.FillType.EVEN_ODD);
        canvas.drawPath(path, paint);


Расположил созданный элемент на лейауте:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:background="@color/white"
                android:layout_height="match_parent">
    <ImageView android:layout_width="match_parent"
               android:src="@drawable/foto"
               android:id="@+id/foto"
               android:layout_height="match_parent"/>
    <ImageView android:layout_width="0dp"
               android:id="@+id/loading"
               android:src="@color/loading"
               android:layout_height="match_parent"/>
    <ru.memores.dressdrawer.DressView
        android:layout_height="match_parent"
        android:id="@+id/dress_view"
        android:layout_width="match_parent"/>

</RelativeLayout>


Все работает, как задумано, однако, после включения и выключения экрана, видно только ImageView. Частично удалось решить проблему вызывая DressView.invalidate() из Activity.onResume(), таким образом после второго включения/выключения экрана все отрисовывается. Но первая итерация выключения стирает прямоугольники. Как можно решить проблему и как-то кэшировать состояние и восстанавливать его при необходимости, и можно ли вообще понять природу этой проблемы?
  • Вопрос задан
  • 2249 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Normanns
Любая вьюха должна самостоятельно сохранять свое состояние и возвращать собственные габариты. Есть подозрение, что такое поведение происходит из-за того, что метод onMeasure не переопределен.
Ответ написан
Комментировать
@jusalex Автор вопроса
Да, после переопределения метода onMeasure и задания нужных размеров для View проблема ушла!
Спасибо!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы