Можно ли замаскировать View в Android? - PullRequest
18 голосов
/ 26 сентября 2011

Можно ли маскировать представления?Например, если у меня есть дизайн, который требует, чтобы представление списка было видно внутри отверстия овальной формы.Есть ли способ создать маску для вида?Это называется что-то еще?Потому что все ссылки, которые я нахожу на маскировку в документах по Android, говорят о маскировке объекта Canvas или Drawable.Но я не думаю, что создание рисованного интерактивного объекта, такого как представление списка, было бы хорошим подходом.Это просто ограничение, с которым нужно иметь дело сейчас?

Ответы [ 2 ]

34 голосов
/ 26 сентября 2011

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

......
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);
}

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

12 голосов
/ 31 июля 2014

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

<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"/>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...