2014-09-06 2 views
1

J'essaie de créer une application de fond d'écran. Et j'ai eu de gros problèmes lors de la mise en fond d'écran avec bitmap. J'essaie de comprendre la réponse pour une semaine.Définir le papier peint avec bitmap pour éviter la recadrage et régler le centre de l'ajustement

Je veux mettre Bitmap pour papier peint comme

  1. éviter la culture
  2. scaleType: fit_center (alignement vertical central, rapport d'aspect)

Comment puis-je faire?

P.S. Et j'ai trouvé que peut-être je peux utiliser Bitmap.createBitmap, mais mon essai a échoué encore et encore. Je n'ai aucune idée que je devrais utiliser seulement WallPaperManager ou Bitmap.createBitmp Too.

CreateBitmap statique Bitmap (Bitmap source, int x, int y, int largeur, int hauteur, matrice m, filtre booléen)

public void setScreenBitmap(final Bitmap bitmapInputed) 
{ 

    final WallpaperManager wpm = WallpaperManager.getInstance(myContext); 

    final Display display = ((Activity) this.myContext).getWindowManager().getDefaultDisplay(); 

    Point size = new Point(); 
    display.getSize(size); 
    int width = size.x; 
    int height = size.y; 


    try 
    { 
     wpm.setBitmap(Bitmap.createScaledBitmap(bitmapInputed, width, height, true)); 
    } 
    catch (IOException e) 
    { 
     Log.e(TAG+".setScreenBitmap", e.toString()); 
     e.printStackTrace(); 
    } 
    wpm.setWallpaperOffsetSteps(1.0f, 1.0f); 

    wpm.suggestDesiredDimensions(width, height); 

} 






09-06 20:38:15.563: W/System.err(4892): java.lang.IllegalArgumentException: x must be >= 0 
09-06 20:38:15.563: W/System.err(4892):  at android.graphics.Bitmap.checkXYSign(Bitmap.java:285) 
09-06 20:38:15.563: W/System.err(4892):  at android.graphics.Bitmap.createBitmap(Bitmap.java:580) 
09-06 20:38:15.568: W/System.err(4892):  at android.graphics.Bitmap.createBitmap(Bitmap.java:551) 
09-06 20:38:15.568: W/System.err(4892):  at com.myarena.util.MyWallpaperUtil.getBitmapFromCenterAndScreenSize(MyWallpaperUtil.java:459) 
09-06 20:38:15.568: W/System.err(4892):  at com.myarena.util.MyWallpaperUtil.setScreenBitmap(MyWallpaperUtil.java:485) 
09-06 20:38:15.568: W/System.err(4892):  at com.myarena.util.MyWallpaperUtil.changeWallpaper(MyWallpaperUtil.java:231) 
09-06 20:38:15.568: W/System.err(4892):  at com.myarena.controller.ControllerActivity$PlaceholderFragment$2.onClick(ControllerActivity.java:213) 
09-06 20:38:15.568: W/System.err(4892):  at android.view.View.performClick(View.java:4489) 
09-06 20:38:15.568: W/System.err(4892):  at android.view.View$PerformClick.run(View.java:18803) 
09-06 20:38:15.568: W/System.err(4892):  at android.os.Handler.handleCallback(Handler.java:730) 
09-06 20:38:15.568: W/System.err(4892):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-06 20:38:15.568: W/System.err(4892):  at android.os.Looper.loop(Looper.java:137) 
09-06 20:38:15.568: W/System.err(4892):  at android.app.ActivityThread.main(ActivityThread.java:5493) 
09-06 20:38:15.568: W/System.err(4892):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-06 20:38:15.568: W/System.err(4892):  at java.lang.reflect.Method.invoke(Method.java:525) 
09-06 20:38:15.568: W/System.err(4892):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
09-06 20:38:15.568: W/System.err(4892):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
09-06 20:38:15.568: W/System.err(4892):  at dalvik.system.NativeStart.main(Native Method) 

Répondre

2

Si vous voulez la culture bitmap du centre et même écran résolution, puis utilisez la méthode ci-dessous. Ici, le bitmap renvoyé est identique à la résolution de l'écran et au recadrage.

Pour Ex. Votre taille de bitmap 480x820

La taille de votre périphérique 480x800 son retour 480x800 (10 pixels supérieurs et 10 pixels inférieurs supprimés après l'échelle).

La taille de votre périphérique 800x1280 son Retour 800x1280 (les 43 premiers pixels et les 43 derniers pixels sont supprimés après l'échelle).

private Bitmap cropBitmapFromCenterAndScreenSize(Bitmap bitmap) { 
    float screenWidth, screenHeight; 
    float bitmap_width = bitmap.getWidth(), bitmap_height = bitmap 
      .getHeight(); 
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)) 
      .getDefaultDisplay(); 
    screenWidth = display.getWidth(); 
    screenHeight = display.getHeight(); 

    Log.i("TAG", "bitmap_width " + bitmap_width); 
    Log.i("TAG", "bitmap_height " + bitmap_height); 

    float bitmap_ratio = (float) (bitmap_width/bitmap_height); 
    float screen_ratio = (float) (screenWidth/screenHeight); 
    int bitmapNewWidth, bitmapNewHeight; 

    Log.i("TAG", "bitmap_ratio " + bitmap_ratio); 
    Log.i("TAG", "screen_ratio " + screen_ratio); 

    if (screen_ratio > bitmap_ratio) { 
     bitmapNewWidth = (int) screenWidth; 
     bitmapNewHeight = (int) (bitmapNewWidth/bitmap_ratio); 
    } else { 
     bitmapNewHeight = (int) screenHeight; 
     bitmapNewWidth = (int) (bitmapNewHeight * bitmap_ratio); 
    } 

    bitmap = Bitmap.createScaledBitmap(bitmap, bitmapNewWidth, 
      bitmapNewHeight, true); 

    Log.i("TAG", "screenWidth " + screenWidth); 
    Log.i("TAG", "screenHeight " + screenHeight); 
    Log.i("TAG", "bitmapNewWidth " + bitmapNewWidth); 
    Log.i("TAG", "bitmapNewHeight " + bitmapNewHeight); 

    int bitmapGapX, bitmapGapY; 
    bitmapGapX = (int) ((bitmapNewWidth - screenWidth)/2.0f); 
    bitmapGapY = (int) ((bitmapNewHeight - screenHeight)/2.0f); 

    Log.i("TAG", "bitmapGapX " + bitmapGapX); 
    Log.i("TAG", "bitmapGapY " + bitmapGapY); 

    bitmap = Bitmap.createBitmap(bitmap, bitmapGapX, bitmapGapY, 
      screenWidth,screenHeight); 
    return bitmap; 
} 
+0

Merci pour répondre à ma question grand frère! mais, je veux dire que «je ne veux pas recadrer mon bitmap», Et je remarque savoir (si tard) que j'ai été écrit «largeur match_parent» signifie réellement la largeur ou la hauteur match_parent. désolé ... – HoJunLee

+0

Je découvre pour le code ur personnalisé à la mienne .. Il faudra un 10min ... – HoJunLee

+0

umm ... peut-être prendre plus de 15min ... – HoJunLee

Questions connexes