2013-05-31 3 views
1

Я загружаю изображение с сервера и устанавливаю его на задний план. но мне нужно назначить повторный градиент изображения на это фоновое изображение, и у меня есть текст, который мне нужно показать поверх этого.Повторите градиент изображения на фоновом изображении

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

Bitmap bitmap = DownloadImage(imageUrl); 
BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap); 
bitmapDrawable.setGravity(Gravity.BOTTOM|Gravity.RIGHT); 
//Drawable d = new BitmapDrawable(bitmap); 
myLinearLayout.setBackgroundDrawable(bitmapDrawable); 

Я создаю один список слоев, который мне нужно показать на этом верхушке фона.

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape android:shape="rectangle"> 
     <gradient 
      android:type="radial" android:gradientRadius="500" 
      android:startColor="#17568A" 
      android:endColor="#494C4F" /> 

    </shape> 
</item> 
<item> 
    <bitmap 
     android:src="@drawable/gradient_dish" 
     android:tileMode="repeat" /> 
</item> 
</layer-list>   

Но я уже назначаю изображение сервера на макет, поэтому не могу назначить этот xml-файл в фоновом режиме.

У меня есть одно изображение «gradient_dish», которое я хочу сделать повторить и хочу показать фоновое изображение.

Как я могу это сделать? пожалуйста, предоставьте мне ссылку или ссылку.
Заранее спасибо ...

+0

Не можете просто создать 'LayerDrawable' в коде из' BitmapDrawable' скачиваются из сети + слоев из выставляемого xml, который вы разместили, и используете его в качестве фона? – Luksprog

+0

у вас есть код для этого? –

+1

Посмотрите на этот https://gist.github.com/luksprog/5696975 – Luksprog

ответ

2

С помощью изображения, которое вы извлекаете из Интернета, вы можете создать желаемый чертеж, а также добавить чертежи из XML-файла, который вы опубликовали. Вы можете использовать метод ниже:

public Drawable createBackground(Bitmap bitmap) { 
    Drawable[] layers = new Drawable[3]; 
    BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap); 
    bitmapDrawable.setGravity(Gravity.BOTTOM | Gravity.RIGHT); 
    layers[0] = bitmapDrawable; 
    GradientDrawable gd = new GradientDrawable(); 
    gd.setShape(GradientDrawable.RECTANGLE); 
    gd.setGradientRadius(500); 
    gd.setGradientType(GradientDrawable.RADIAL_GRADIENT); 
    gd.setColors(new int[] { Color.parseColor("#17568A"), 
      Color.parseColor("#494C4F") }); 
    layers[1] = gd; 
    BitmapDrawable lastBitmapDrawable = (BitmapDrawable) getResources() 
      .getDrawable(R.id.gradient_dish); 
    lastBitmapDrawable.setTileModeX(TileMode.REPEAT); 
    layers[2] = lastBitmapDrawable; 
    LayerDrawable bck = new LayerDrawable(layers); 
    return bck; 
} 

Тогда вы бы просто сделать:

Bitmap bitmap = DownloadImage(imageUrl); 
myLinearLayout.setBackgroundDrawable(createBackground(bitmap)); 
+0

Можете ли вы сделать одну услугу. Он работает над эмулятором, но не на реальном устройстве ... как? Спасибо ... –

+0

@SandipArmalPatil Это не работает, каким образом (неполно, изображение вообще не появляется)? Кроме того, на каком устройстве вы протестировали его и с каким уровнем api (попробовали ли вы тестирование на других устройствах)? – Luksprog

0

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

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