2016-01-20 26 views
5

Chcę wyświetlić obraz jako tło w mojej aplikacji. Teraz użyłem tego stwierdzenia: android:background="@drawable/background" w <LineraLayout>. Oto kod .xml:Programowanie Androida Obraz tła w tle

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="overbit.user.MainActivity" 
    android:background="@drawable/background"> 
</LinearLayout> 

Teraz otrzymuję ten wynik:

image

Ale chcę to tak:

as

Może ktoś z was może pomóc mnie. Dzięki.

Odpowiedz

7

Istnieje BitmapDrawable, który pozwala to zrobić. Najpierw trzeba stworzyć rozciągliwej zasób w następujący sposób (niech będzie to plik z zasobów projektu res/drawable/mybg.xml):

<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/background" 
    android:gravity="center" /> 

a następnie określić go jako zasób tła w układzie:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="overbit.user.MainActivity" 
    android:background="@drawable/mybg"> 
</LinearLayout> 
3

Ty trzeba zmienić rozmiar samego obrazu w programie Photoshop lub coś w celu uzyskania pożądanego rezultatu (nadal może to być bardzo trudne ze względu na różne rozmiary ekranów smartfonów z systemem Android). Rozwiązaniem może być zmiana układ nadrzędny do Relativelayout a następnie użyć to ImageView pokazać swój obraz tak:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:ads="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView 
     android:layout_width="match_parent" //make sure its match parent 
     android:layout_height="match_parent"// and this one also 
     android:src="@drawable/yourBackgroundImage" 
     android:scaleType="..."/> 
    <LinearLayout>put your childviews here</LinearLayout> 

istnieją 4-5 opcje dostępne dla Androida: scaleType .. eksperymentuj z nimi, aż osiągniesz pożądany rezultat. Należy również pamiętać, że trzeba użyć androida: src zamiast androida: tło atrybutem ImageView

+0

Witam, dziękuję za odpowiedź! Czy to najlepszy sposób? – MyNewName

+0

@MyNewName Uważam, że jest to wygodny i łatwy sposób. Atrybut scaleType w widoku obrazu oferuje przydatną elastyczność. Dodanie dodatkowego ImageView naprawdę nie obciąża Twojego układu (chyba że jest już dość zagracony). – drWisdom

4

Można osiągnąć to, co starasz się zrobić za pomocą BitmapRegionDecoder.

Od docs:

BitmapRegionDecoder może być użyty do dekodowania obszar prostokąta z obrazu. BitmapRegionDecoder jest szczególnie przydatny, gdy oryginalny obraz jest duży i potrzebujesz tylko części obrazu.

Pozwala na dość łatwe dekodowanie obszaru Rect danej bitmapy, jedyne, co musisz zrobić, to obliczyć region Rect w celu dekodowania w stosunku do bitmapy.

0

W systemie Android położenie obrazu jest określane przez lewą górną część obrazu. Zakładam, że kierunek x wynosi 1/3 szerokości od punktu początkowego. Teraz możemy ustawić oś obrotu. Zasadniczo położenie punktu obrotu jest miejscem, wokół którego widok będzie się obracał i skalował.

int displacementX = ImageView.getWidth()/3; 
int displacementY = 10; 
imgview.setPivotX((float)displacementX); 
imgview.setPivotY((float)displacementY); 

Po ustawieniu przegubu możemy użyć typu skali, aby dopasować obraz.

imgview.setScaleType(ImageView.ScaleType.CENTER_CROP);