2012-12-19 4 views
5

tworzę aplikację Galeria, moja pierwsza aplikacja, a to jest mój kodCzy istnieje kod do ustawienia tapety bez przycinania i powiększania w systemie Android?

Bitmap bmd = BitmapFactory.decodeStream(is); 

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

Powyższy kod ustawia tapety Ale tapeta zostanie przycięte lub powiększony po to został ustawiony !! Czy istnieje jakakolwiek modyfikacja, którą mogę wykonać w powyższym kodzie, aby ustawić tapetę bez powiększania lub kadrowania, gdy jest ustawiona !!!!

Plzzzz, pomóż mi! Z góry dzięki :-)

+0

Chcesz ustawić rozmiar bitmapy równy rozmiarowi ekranu urządzenia, czy chcesz osiągnąć efekt paralaksy? – forcelain

Odpowiedz

3

Jestem spóźniony, aby odpowiedzieć na to. Nadzieję, że to pomaga, a ci, którzy odwiedza pytanie:

W twoim przypadku, spróbuj dopasować obraz do rozmiaru urządzenia przez mniej więcej tak:

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); 
} 

Jeżeli powyższy kod nie działa, zrób mały modyfikacja:

... 
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); 
} 

Natomiast sposób 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; 
} 

i ponownie członek, aby dodać uprawnienia:

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

Co to jest metoda calculInSampleSize. Proszę ją wyjaśnić. –

+0

@RobinRoyal Mam zaktualizowaną odpowiedź ... :-) –

+0

Nie działa, to przycinanie na wysokość. Ale jak ustawić tapetę za pomocą całej szerokości bitmapy? – NickUnuchek

Powiązane problemy