2013-08-21 2 views
0

Как я могу установить фон LinearLayout для определенного изображения (которое приобретается из Интернета), не растягивая изображение?Программно устанавливающий фон LinearLayout растягивает изображение

В принципе у меня есть следующий фрагмент кода, который преобразует аа Bitmap в BitmapDrawable, который, в свою очередь, позволяет мне программно установить фон в LinearLayout:

BitmapDrawable myBackground = new BitmapDrawable(myBitmap); 
myLinearLayout.setBackgroundDrawable(myBackground); 

Проблема заключается в том, изображение растягивается, чтобы соответствовать высота и ширина LinearLayout; он не центрирует себя по горизонтали и вертикали, как если бы я установил, что фон был выделен в макете XML. Как я могу достичь этого с помощью моего растрового изображения, которое извлекается из Интернета?

+0

Попытка не менять фоновый слой и использовать его для 'ImageView'. Как установить размер изображения: 'image_view.getLayoutParams(). Height = 50;', 'image_view.getLayoutParams(). Width = 50;' –

ответ

-1

Это происходит потому, что backgroundDrawable не имеют права изменять расположение params родительского макета.

У вас есть 2 варианта:

1 -

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" > 
<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:scaleType="center" /> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
</LinearLayout> 
</FrameLayout> 

2 - SetSize из LinearLayout руками

BitmapDrawable myBackground = new BitmapDrawable(myBitmap); 
LayoutParams lp = myLinearLayout.getLayoutParams(); 
lp.width = myBitmap.getWidth(); 
lp.height = myBitmap.getHeight(); 
myLinearLayout.setlayoutParams(lp) 
myLinearLayout.setBackgroundDrawable(myBackground); 

и вы должны переопределить OnDraw (Canvas с) метод BitmapDrawable, для рисования растрового изображения в центре теперь это выглядит так: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/graphics/drawable/BitmapDrawable.java#BitmapDrawable.draw%28android.graphics.Canvas%29

+0

. Второй выбор заключается в изменении размера макета, вы не должны этого делать, изменяя что-то иначе я думаю. – webmaster

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