2013-12-13 4 views
0

У меня есть PNG-файл, который представляет собой градиентное изображение шириной 283 пикселя в один пиксель, которое мне нужно растянуть на фоне ImageView , растягиваясь только горизонтально. Я попытался установить актив в качестве фона к ImageView, как это:Растяжение градиентного изображения с одним пикселем в растягиваемом или иначе

<ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/gradient_tile" 
     android:layout_gravity="bottom|center" 
     android:scaleType="matrix"/> 

, но это просто создает один пиксель линию в середине родительского вида.

Есть ли способ сделать это, или мне нужно запросить более широкое изображение и использовать 9-патч?

Заранее благодарен.

UPDATE: Я закончил тем, что установить минимальные свойства высоты в XML следующим образом:

<ImageView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="119dp" 
     android:background="@drawable/gradient_tile_drawable" 
     android:id="@+id/tiledGradientBackground" 
     android:layout_gravity="bottom|center" 
     android:scaleType="matrix"/> 

... и затем установить minimumWidth к ширине родительского вида в коде. Не знаю, почему это решить, но это сделал ...

int width = holder.container.getResolvedWidth(); 
holder.tiledGradientBackground.setMinimumWidth(width); 
+1

Вообще говоря, лучший способ сделать градиенты в Android - это использовать «ShapeDrawable», поэтому вы можете растягиваться по мере необходимости и избегать эффектов группировки. – CommonsWare

+0

Спасибо @CommonsWare.Я попробовал создать фигуру и добавить ее в качестве фона для моего изображения, как я видел во многих сообщениях, но, похоже, не имеет никакого эффекта ... – diatrevolo

ответ

2

Попробуйте (мозаичное вместо растяжения):

Поместить в вашей вытяжке папке файл с именем bg.xml:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/your_1px_wide_image" 
    android:tileMode="repeat" 
/> 

и установить его в качестве макета фона

android:background="@drawable/bg" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 

I протестировал его, и он отлично работает.

Это изображение

enter image description here

дает этот результат.

enter image description here

Обратите внимание, что я ставлю некоторые дополнительные прокладки - это экран 320 * 480 в ширине, так что градиент составляет около 1/3-я общей высоты экрана (включая название и статус бар + дополнительное заполнение)

+0

Определенно работает в новом проекте. Должно быть что-то с макетами в проекте, над которым я работаю, потому что он не будет плиткой, а принимает, поскольку он определенно работает. Благодаря! – diatrevolo

+0

Добро пожаловать;) –

2
  1. scaletype влияет на изображение src изображения ImageView, а не на фон, если изображение используется только для фона, установите изображение как src и используйте fitTYY fitXY.
  2. Вы должны создать чертеж, подобный Klaus66 &. Рекомендован CommonsWare и установите его в качестве фона.
  3. На самом деле, если у вас есть градиент 1px, вы, вероятно, можете просто создать GradientDrawable xml, будет выглядеть лучше на разных устройствах. http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html
  4. Вы не должны использовать дополнительные ImageView просто установить его в качестве фона вашей верхней макета или даже фона темы, увидеть мой ответ здесь: Android SplashScreen
+0

Пробовал эти, и они работают в новом проекте ... не уверены, почему они не находятся в текущем проекте, в котором я участвую. – diatrevolo

Смежные вопросы