Как обрезать границы дочернего макета?

#android #webview #android-linearlayout

#Android #webview #android-linearlayout

Вопрос:

У меня есть LinearLayout с фоном shape и WebView внутри. Как обрезать WebView вдоль границы фигуры?

Я хочу, чтобы WebView соответствовал форме, и поэтому WebView не будет иметь острых углов.

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="5dip" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/bg_border"
    android:orientation="vertical" >

    <WebView android:id="@ id/webview" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" />

    </LinearLayout>
</LinearLayout>
  

bg_border.xml

 <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
<stroke
    android:width="1dp"
    android:height="1dp"
    android:color="@color/border" />

<corners
    android:radius="5dp"
    android:bottomRightRadius="5dp"
    android:bottomLeftRadius="5dp"
    android:topLeftRadius="5dp"
    android:topRightRadius="5dp" />
  

введите описание изображения здесь

Ответ №1:

Держу пари, вы можете только имитировать это. Создайте другую фигуру с (меньшим) радиусом и сделайте ее белой. Поместите это вокруг вашего веб-представления. Это, очевидно, не сработает, если страница, на которую вы смотрите, не белая.

Кроме того, вам не нужно определять TopLeft / bottomRight / etc, если вы уже определили «radius» и все значения одинаковы.

ОБНОВИТЕ идеи. Оба они включают исходное изображение, ПОДОБНОЕ этому: http://www.noiseindustries.com/downloads/misc/FxFactoryHelp/pluginguide/generators/roundedrectangle/files/ni-rounded-rectangle.jpg

Просто убедитесь, что граница НАМНОГО меньше. 3-5 пикселей. Белый центр должен быть прозрачным, а не белым.

1) Создайте RelativeLayout и создайте изображения для сторон и углов. С макетом и изображениями в основном раскладывайте изображения так, чтобы вы «рисовали» границу. Не помещайте ничего в центр. Создайте FrameLayout, поместите webview, затем поместите RelativeLayout сверху. Будем надеяться, что события касания в центре попадут в webview, но все равно дадут вам мягкую границу по краям.

2) Создайте изображение с 9 участками, которое в основном выглядит так же, как граница, описанная в 1. Сделайте то же самое FrameLayout, описанное в 1, и добавьте Webview. Кроме того, добавьте ПОЛЬЗОВАТЕЛЬСКИЙ вид. Установите фон на 9-патч и убедитесь, что пользовательский вид передает все свои события касания.

Я подозреваю, что # 1 было бы проще реализовать, но кто знает?

Комментарии:

1. Цвет страницы изменится, так что это не мой способ. Спасибо за комментарий о «радиусе».

2. Я выберу первое. Я думал, что есть более простой способ 🙂