2013-04-04 15 views
6

Ho una schermata iniziale con un ImageView che riproduce la parte di uno sfondo. Indipendentemente dal fatto che consenta o meno il ridimensionamento della bitmap (cosa che faccio), la qualità dell'immagine è orribile. Penso che stia riducendo la profondità del colore. Mi sono già guardato attorno SO e un suggerimento è stato quello di posizionare la mia immagine in raw invece di drawable ma questo non è stato d'aiuto. Ecco uno screenshot:Qualità bitmap di ImageView orribile?

enter image description here

Che cosa esattamente sta succedendo qui e come posso risolvere il problema?

EDIT: Non ho applicato questa bitmap a livello di codice, quindi non c'è alcun codice Java pertinente. Ecco il codice XML per questa attività:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/RelativeLayoutSplash" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:drawingCacheQuality="high" 
    android:orientation="vertical" 
    android:padding="@dimen/splash_padding" 
    android:scrollbarAlwaysDrawVerticalTrack="true" 
    tools:context=".SplashActivity" > 

    <ImageView 
     android:id="@+id/ImageViewBg" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:contentDescription="@string/logo_description" 
     android:scaleType="centerCrop" 
     android:src="@drawable/splash_bg_register" /> 

    <ImageView 
     android:id="@+id/ImageViewLogo" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:contentDescription="@string/logo_description" 
     android:maxHeight="@dimen/logo_maxheight" 
     android:maxWidth="@dimen/logo_maxwidth" 
     android:layout_centerVertical="true" 
     android:src="@drawable/logo" /> 

    <TextView 
     android:id="@+id/TextViewCopyright" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:text="@string/copyright" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textColor="@color/white_50" 
     android:textSize="@dimen/copyright_size" /> 

</RelativeLayout> 

EDIT: Ho provato getWindow().setFormat(PixelFormat.RGBA_8888); come suggerito, che ha fatto la differenza visibile ma il bendaggio è ancora presente. This è l'immagine che sto usando come sfondo.

+7

inserisci il tuo codice. –

+0

Mi dispiace per quello. –

+0

qual è la dimensione dell'immagine? –

risposta

8

Banding si verifica soprattutto quando il rapporto di formato dell'immagine è disturbata.

Si potrebbe provare uno qualsiasi dei seguenti:

  1. Fai la tua immagine .9.png. In tal caso, risolverà automaticamente eventuali distorsioni e si occuperà della creazione di strisce.

  2. Applicare un dithering superficiale all'immagine che potrebbe impedire la formazione di strisce insolite.

    <bitmap 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:src="@drawable/b1" 
        android:tileMode="repeat" 
        android:dither="true" /> 
    
2

Quali sono le dimensioni della tua immagine? E qual è il dispositivo? Quello che sospetto è che la dimensione dell'immagine non corrisponda alla dimensione del display e si trova nella cartella di risorse errate. L'immagine sembra piuttosto ridimensionata. Questi articoli dovrebbero aiutarti a scegliere la risoluzione dell'immagine e la cartella delle risorse per schermi diversi.

http://developer.android.com/guide/practices/screens_support.html

http://developer.android.com/training/multiscreen/index.html

+0

Ho aggiornato la domanda per collegarmi a una copia dell'immagine che sto usando come sfondo. È 1000x800px. Sto testando su un dispositivo Galaxy S Blaze. Sto usando un '' risorsa XML che fa riferimento a 'splash_bg.png'. È ridimensionato per adattarsi all'altezza dello schermo del dispositivo di destinazione. La larghezza è ritagliata. –

+1

Non è necessario creare un bitmap xml. Basta impostare l'immagine e la scalaTipo centerCrop è corretta. Per Galaxy Blaze prova a creare una copia della tua immagine con risoluzione 480x800 e inseriscila nella cartella drawable-normal-hdpi. –

2

È necessario impostare il formato di colore della finestra. Nella vostra attività di mettere qualcosa di simile:

getWindow().setFormat(PixelFormat.RGBA_8888); 
+0

Questo ha funzionato in misura. Riesco a vedere alcune differenze visibili, ma vedo ancora gli stessi artefatti di banding. Qualche idea su cosa provare dopo? –

0

Prova antialias questo potrebbe risolto si problema.

Creare un bitmap disegnabile con il sotto xml.

<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/background" 
    android:antialias="true" 
    android:dither="true" /> 
1

Immagino che la dimensione dell'immagine sia inferiore all'area in cui è visualizzata l'immagine. Quindi, l'immagine potrebbe essere in aumento e perdere la qualità.

What you can try is: 

1. Either put the image of similar dimension 
2. use 9 patch image (good idea) 
1

È necessario ridimensionare l'immagine in diverse dimensioni e mettere quelli in rispettive cartelle disegnabili sotto res/

0

Quello che state facendo è quello di impostare l'immagine in formato XML che molto di più dipende su ciò che supporto per la risoluzione delle immagini per.

c'è un numero di cartelle per ciascuna densità supportata di più dispositivi, mettere l'immagine su una cartella adatta di dpi.

si rimanda questo link per esso http://developer.android.com/guide/practices/screens_support.html

vedono stessa icona dell'app come comportarsi con diffidenza nella cartella diversa

Esempio di applicazione senza il supporto per diverse densità, come illustrato a bassa, media, e gli schermi

ad alta densità

Example application without support for different densities, as shown on low, medium, and high density screens.

enter image description here

Esempio di applicazione con un buon supporto per diverse densità (è indipendente dalla densità), come mostrato su schermi di bassa, media e alta densità.

0

Basta modificarlo rendendo l'immagine un'immagine di sfondo. Ecco un esempio di codice

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/your_image" 
    /> 
Problemi correlati