2012-12-19 18 views
5

Sto creando una galleria app, la mia prima applicazione, e questo è il mio codiceC'è qualche codice per impostare lo sfondo senza ritaglio e zoom in Android?

Bitmap bmd = BitmapFactory.decodeStream(is); 

    try{ 
     getApplicationContext().setWallpaper(bmd); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 

Il codice sopra imposta parati Ma la carta da parati viene ritagliata o ingrandita dopo ha ottenuto set !! C'è qualche modifica che posso fare nel codice di cui sopra in modo che io possa impostare lo sfondo senza zoom o ritaglio quando è impostato !!!!

Plzzzz help me !! Grazie in anticipo :-)

+0

Si desidera impostare la dimensione bitmap uguale alla dimensione del display del dispositivo o si desidera ottenere l'effetto di parallasse? – forcelain

risposta

3

Sono in ritardo per rispondere a questo. Spero che ti aiuta e chi visita il tuo domanda:

Nel tuo caso, cercare di regolare la foto per dimensione del dispositivo da un po 'come questo:

DisplayMetrics displayMetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
int height = displayMetrics.heightPixels; 
int width = displayMetrics.widthPixels << 1; // best wallpaper width is twice screen width 

// First decode with inJustDecodeBounds=true to check dimensions 
final BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 
BitmapFactory.decodeFile(path, options); 

// Calculate inSampleSize 
options.inSampleSize = calculateInSampleSize(options, width, height); 

// Decode bitmap with inSampleSize set 
options.inJustDecodeBounds = false; 
Bitmap decodedSampleBitmap = BitmapFactory.decodeFile(path, options); 

WallpaperManager wm = WallpaperManager.getInstance(this); 
try { 
    wm.setBitmap(decodedSampleBitmap); 
} catch (IOException e) { 
    Log.e(TAG, "Cannot set image as wallpaper", e); 
} 

Se sopra codice non funziona, fare un piccolo modifica:

... 
WallpaperManager wm = WallpaperManager.getInstance(this); 
try { 
    wm.setBitmap(decodedSampleBitmap); 
    wm.suggestDesiredDimensions(width, height); 
} catch (IOException e) { 
    Log.e(TAG, "Cannot set image as wallpaper", e); 
} 

e il metodo calculateInSampleSize:

public static int calculateInSampleSize(
      BitmapFactory.Options options, int reqWidth, int reqHeight) { 
    // Raw height and width of image 
    final int height = options.outHeight; 
    final int width = options.outWidth; 
    int inSampleSize = 1; 

    if (height > reqHeight || width > reqWidth) { 

     final int halfHeight = height/2; 
     final int halfWidth = width/2; 

     // Calculate the largest inSampleSize value that is a power of 2 and keeps both 
     // height and width larger than the requested height and width. 
     while ((halfHeight/inSampleSize) > reqHeight 
       && (halfWidth/inSampleSize) > reqWidth) { 
      inSampleSize *= 2; 
     } 
    } 

    return inSampleSize; 
} 

e ri membro per aggiungere autorizzazioni:

<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/> 
<uses-permission android:name="android.permission.SET_WALLPAPER"/> 
+0

Che cos'è il metodo calculateInSampleSize. Spiegarlo. –

+0

@RobinRoyal Ho aggiornato la risposta ... :-) –

+0

Non funziona, sta croppando in altezza. Ma come impostare lo sfondo per tutta la larghezza della bitmap? – NickUnuchek