Intereting Posts
Службы Google Play: странный знак поведения Вызывает метод libgdx SpriteBatch для начала и конца в несколько раз дороже? Background ListView становится черным при прокрутке Android: Как обновить пользовательский интерфейс от AsyncTask, если AsyncTask находится в отдельном классе? Хорошие примеры туров / обучающих программ / прохождений в приложении на Android или iPhone Как я могу управлять мобильным экраном из браузера? Getdate from datepicker android Обработка пейджинга с помощью RxJava Как создать AVD для Android 4.0.3? (Не удалось найти «userdata.img») Android добавит мое приложение в кнопку «Поделиться» в галерее Как я могу использовать новый Xtend-язык Eclipse в своем проекте Android? Будет ли Android поддерживать WebSockets в предстоящей версии? Android TranslateAnimation сбрасывается после анимации Androind 2.2 Preview 1 – Использование ConstraintsLayout при сбоях приложения GuideLine Listview Прокрутка до конца списка после обновления списка

Добавление изображения в текстовый фон текста

Недавно я хотел сделать что-то изящное с моим новым проектом, как, как следует из названия, добавить фоновое изображение в качестве фона текста, а не типичный постоянный цвет вокруг. В частности, у меня есть изображение градиента для этого текста.

Что-то вроде этого

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

Как правило, я ожидал бы решение типа файла с гибким ресурсом xml, но любое простое решение получило высокую оценку

РЕДАКТИРОВАТЬ:

Спасибо за все шейдерные решения, но, ради вопроса, будут приняты только ответы, которые обеспечивают решение, касающееся фоновых изображений,

Solutions Collecting From Web of "Добавление изображения в текстовый фон текста"

Вы можете применить BitmapShader к краске TextView .

 myTextView.getPaint().setShader(new BitmapShader(myBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); 

Существуют другие типы шейдеров, если вы не хотите использовать изображение. Документация здесь .

Shader – это класс, основанный на объектах, возвращающих горизонтальные интервалы цветов во время рисования. Подкласс Shader устанавливается в Paint paint.setShader (шейдер) . После этого любой объект (кроме растрового изображения), который нарисован этой краской, получит свой цвет (-ы) из шейдера.

  Bitmap bitmapObj = BitmapFactory.decodeResource(getResources(),R.drawable.your_image); Shader shaderObj = new BitmapShader(bitmapObj,Shader.TileMode.REPEAT,Shader.TileMode.REPEAT); textViewObj.getPaint().setShader(shaderObj); textViewObj.setText("hello"); 

Вы должны назвать правильный Shader.TileMode

Вы также можете следовать

  1. Градиент TextView
  2. Текст градиента текста

Вы можете использовать yourTextView.getPaint().setShader(new LinearGradient(...));

Для LinearGradient существует два конструктора:

 /** Create a shader that draws a linear gradient along a line. @param x0 The x-coordinate for the start of the gradient line @param y0 The y-coordinate for the start of the gradient line @param x1 The x-coordinate for the end of the gradient line @param y1 The y-coordinate for the end of the gradient line @param colors The colors to be distributed along the gradient line @param positions May be null. The relative positions [0..1] of each corresponding color in the colors array. If this is null, the the colors are distributed evenly along the gradient line. @param tile The Shader tiling mode */ public LinearGradient(float x0, float y0, float x1, float y1, int colors[], float positions[], TileMode tile) 

А также

 /** Create a shader that draws a linear gradient along a line. @param x0 The x-coordinate for the start of the gradient line @param y0 The y-coordinate for the start of the gradient line @param x1 The x-coordinate for the end of the gradient line @param y1 The y-coordinate for the end of the gradient line @param color0 The color at the start of the gradient line. @param color1 The color at the end of the gradient line. @param tile The Shader tiling mode */ public LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, TileMode tile) 

Документация шейдеров:

https://developer.android.com/reference/android/graphics/Shader.html

Документация Shaders.TileMode:

https://developer.android.com/reference/android/graphics/Shader.TileMode.html


Другой способ (как идея и не тестировался):

Преобразуйте текст в растровое и рисованное, затем используйте GradientDrawable

Создайте gradient.xml в папке с возможностью переноса. Вы можете установить угол, начальный и конечный цвет. Установите это значение как фоновый

  <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#FFFFFF" android:endColor="#00000000" android:angle="45"/> </shape> 

Вместо того, чтобы загружать gpu / system, используя шейдеры и прочее, предложенные выше, рекомендуется использовать относительный макет.

 <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:id="@+id/your_imageview_id" android:layout_width="fill_parent" android:layout_height="As_you_want_dp" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:scaleType="fitXY" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/your_textview_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="20dp" android:layout_centerHorizontal="true" /> </RelativeLayout>