Подтвердить что ты не робот

Кнопка с цветом фона и прозрачным текстом

У меня есть макет с некоторым фоновым изображением и на нем есть кнопка. Цвет фона кнопки, скажем, белый. Теперь я хочу написать текст на нем таким образом, чтобы текст отображал все, что находится за кнопкой через него (например, прозрачный текст). Теперь, очевидно, если я сделаю текст прозрачным, текст исчезнет, ​​и я увижу белую кнопку без текста. Как это сделать?

Скриншот:

button with transparent text

4b9b3361

Ответ 1

Два способа: (1) не точное решение, так как выравнивание текста должно быть закодировано руками, но:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button view1 = new Button(this);

    RelativeLayout layout1 = (RelativeLayout) findViewById(R.id.layout1);
    layout1.setBackground(getResources().getDrawable(R.drawable.choose_background));

    layout1.addView(view1);

    Bitmap mainImage = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
    {
        //creating image is not necessary, more important is ability to grab the bitmap.
        Canvas canvas = new Canvas(mainImage);
        canvas.drawColor(Color.WHITE);
        view1.setBackground(new BitmapDrawable(getResources(), mainImage));
    }

    {
        Canvas canvas = new Canvas(mainImage);
        //most interesting part:
        Paint eraserPaint = new Paint();
        eraserPaint.setAlpha(0); //this
        eraserPaint.setTextSize(200);
        eraserPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); //and this
        canvas.drawText("some", 10, 150, eraserPaint);
    }
}

идея eraserPaint отсюда Удалить части растровых изображений с использованием режима PorterDuff и здесь Android, как применить маску к ImageView?

в файле activity_main.xml все по умолчанию:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.runup.myapplication2.app.MainActivity">

и результат:

enter image description here

(2) Второй способ - добавить это поведение в класс, чтобы использовать его в xml.  https://github.com/togramago/ClearTextViewProject - проект библиотеки с образцом. Вы можете добавить в библиотеку или скопировать только класс ClearTextView в свой проект (поскольку это расширенный TextView без ресурсов xml). работает над изменением конфигурации и динамическим текстом и/или фоновыми изменениями.

Результат образца в портрете: enter image description here

и в ландшафте: enter image description here