Erstelle eine Datei (Java-Klasse) unter src/[path] mit dem Namen: "ImageUtils.java" und füge folgenden Text ein:
1public class ImageUtils
2{
3 4 public static Drawable scaleDrawable(Drawable drawable, int width, int height, boolean filter) throws Exception {
5 Drawable d = drawable;
6 int w = width;
7 int h = height;
8 boolean f = filter;
9 10 Bitmap b = drawableToBitmap(d);
11 Bitmap sB = Bitmap.createScaledBitmap(b, w, h, f);
12 13 return new BitmapDrawable(s
;
14 }
15 16 public static Drawable cropDrawable(Drawable drawable, int x, int y, int width, int height, boolean filter) throws Exception {
17 Drawable d = drawable;
18 int sX = x;
19 int sY = y;
20 int w = width;
21 int h = height;
22 boolean f = filter;
2324 Bitmap b = drawableToBitmap(d);
25 Bitmap sB = Bitmap.createBitmap(b, sX, sY, w, h, new Matrix(), f);
2627 return new BitmapDrawable(s
;
28 }
29 30 public static Bitmap drawableToBitmap(Drawable drawable) {
31 if (drawable instanceof BitmapDrawable) {
32 return ((BitmapDrawable)drawable).getBitmap();
33 }
3435 Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
36 Canvas canvas = new Canvas(bitmap);
37 drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
38 drawable.draw(canvas);
39 return bitmap;
40 }
41 42}
Falls bei dir
dasteht, schreibe: "B )" ohne Lehrstellen
Vergiss nicht, die nötigen Klassen zu importieren. (Bei AIDE einfach lange auf eine unterringelte Stelle drücken, dann auf "fix" und "fix imports" gehen).
Dann füge folgende Methoden zu deiner Activity hinzu:
1public void setBackground(Drawable d)
2 {
3 try
4 {
5 WallpaperManager wm = WallpaperManager.getInstance(c);
6 View dv = getWindow().getDecorView();
7
8 getWindow().setBackgroundDrawable(ImageUtils.cropDrawable(d, 0, 0, dv.getWidth(), dv.getHeight(), true));
9 }
10 catch (Exception e)
11 {
12 Toast.makeText(c, getResources().getString(R.string.exception_background) + " - " + e.getMessage(), Toast.LENGTH_SHORT).show();
13 }
14 }
1public void setViewBackground(View v, Drawable d)
2 {
3 try
4 {
5v.setBackgroundDrawable(ImageUtils.cropDrawable(d, 0, 0, v.getWidth(), v.getHeight(), true));
6 }
7 catch (Exception e)
8 {
9 Toast.makeText(c, getResources().getString(R.string.exception_background) + " - " + e.getMessage(), Toast.LENGTH_SHORT).show();
10 }
11 }
Um jetzt den Hintergrund deiner Activity zu setzen, kannst du
setBackground(DeinDrawable); nutzen.
Wenn du von einem View den Hintergrund setzen möchtest, kannst du
setViewBackground(deinView, deinDrawable); nutzen.
Falls es bei dir nicht funktioniert, dann kann es entweder daran liegen, dass das Bild zu klein/groß zum skalieren ist, oder dass du diese Methoden (setDrawable / setViewDrawable) direkt nach dem Starten der Activity / Anzeigen des Views aufgerufen hast. Im zweiten Fall musst du das ganze etwas verzögern:
1new Thread() {
2public void run () {
3try {
4//200 millisekunden warten:
5sleep (200);
6//im ui-thread ausführen, damit die App nicht abstürzt:
7runOnUiThread (new Runnable() {
8public void run () {
9setBackground (deinBild);
10
11// oder:
12
13setViewBackground(deinView, deinBild);
14}
15});
16} catch (Exception e) {
17//dann halt net
18}
19}
20}.start();
LG
— geändert am 29.09.2013, 08:01:12
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.