Сделал простой класс 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(), таким образом после второго включения/выключения экрана все отрисовывается. Но первая итерация выключения стирает прямоугольники. Как можно решить проблему и как-то кэшировать состояние и восстанавливать его при необходимости, и можно ли вообще понять природу этой проблемы?