Можно ли замаскировать представление в андроиде?

Можно ли маскировать представления? Например, если у меня есть проект, который требует, чтобы вид списка был видимым в овальной форме. Есть ли способ создать маску для представления? Это называется чем-то еще? Поскольку все ссылки, которые я нахожу для маскирования в документах android, говорят о маскировке объекта canvas или drawable. Но я не думаю, что создание привлекательного интерактивного объекта, такого как List View, будет хорошим подходом. Является ли это просто ограничением для решения проблемы сейчас?

Ответы

Ответ 1

Да, это - вы должны переопределить метод рисования вашего представления - i.e:

......
final Path path = new Path();
path.addRoundRect(new RectF(0,0,getWidth(),getHeight()),10,10,Direction.CW);
......
@Override
protected void dispatchDraw(Canvas canvas){
    canvas.clipPath(path);
    super.dispatchDraw(canvas);
}

это отобразит ваше представление только в границах, установленных по пути.

Ответ 2

Да, вы можете даже маскировать полные макеты. Бесстыдные самопроверки

<com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout
android:id="@+id/frm_mask_animated"
android:layout_width="100dp"
app:porterduffxfermode="DST_IN"
app:mask="@drawable/animation_mask"
android:layout_height="100dp">

<ImageView android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:scaleType="centerCrop"
           android:src="@drawable/unicorn"/>

Вы можете найти здесь