2016-01-20 15 views
5

Desidero visualizzare un'immagine come sfondo nella mia app. Ora ho usato questa affermazione: android:background="@drawable/background" in <LineraLayout>. Ecco il codice .xml:Immagine di ritaglio di programmazione Android

<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> 

ora ho questo output:

image

Ma io voglio in questo modo:

as

Forse qualcuno di voi può aiutare me. Grazie.

risposta

7

C'è BitmapDrawable, che consente di farlo. In primo luogo è necessario creare una risorsa disegnabile come segue (lascia che sia un file in risorse del progetto res/drawable/mybg.xml):

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

e quindi specificare come una risorsa di sfondo nel layout:

<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

È è necessario modificare la dimensione dell'immagine stessa in Photoshop o qualcosa per ottenere il risultato desiderato (tuttavia ciò può essere molto difficile a causa delle varie dimensioni dello schermo degli smartphone Android). Una soluzione può essere quella di cambiare il layout genitore per Relativelayout e quindi utilizzare un un ImageView per mostrare la vostra foto come questa:

<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> 

ci sono 4-5 opzioni disponibili per Android: scaleType .. Sperimenta con loro, fino ad ottenere il risultato desiderato. Si noti inoltre che è necessario utilizzare Android: src piuttosto che Android: sfondo attributo della ImageView

+0

Ciao, grazie per la tua risposta! È il modo migliore? – MyNewName

+0

@ MyNewName Lo trovo un modo comodo e semplice. L'attributo scaleType in imageview ti offre una flessibilità utile. L'aggiunta di un ulteriore ImageView non sovraccarica il layout (a meno che non sia già abbastanza ingombrante). – drWisdom

4

si può realizzare quello che stai cercando di fare utilizzando BitmapRegionDecoder.

Dalla documentazione:

BitmapRegionDecoder può essere utilizzato per decodificare una regione rettangolo da un'immagine . BitmapRegionDecoder è particolarmente utile quando un'immagine originale di è ampia e servono solo parti dell'immagine.

Permette di decodificare l'area Rect di una particolare Bitmap in modo abbastanza semplice, l'unica cosa che devi fare è calcolare la regione di Rect da decodificare rispetto alla Bitmap.

0

In Android la posizione di un ImageView è determinata dal lato superiore sinistro dell'immagine. Suppongo che la direzione x sia 1/3 della larghezza rispetto al punto iniziale. Ora possiamo impostare il pivot. Fondamentalmente, la posizione del punto di articolazione è una posizione attorno alla quale la vista ruoterà e ridimensionerà.

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

Ora che abbiamo impostato il pivot possiamo usare un tipo di scala per adattare l'immagine.

imgview.setScaleType(ImageView.ScaleType.CENTER_CROP); 
Problemi correlati