BitmapDrawable przestarzała alternatywa


88

Mam następujący kod, który obróci rysowany o określoną liczbę stopni.

    public Drawable rotateDrawable(float angle, Context context)
    {
      Bitmap arrowBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.generic2rb);

      // Create blank bitmap of equal size
      Bitmap canvasBitmap = arrowBitmap.copy(Bitmap.Config.ARGB_8888, true);
      canvasBitmap.eraseColor(0x00000000);

      // Create canvas
      Canvas canvas = new Canvas(canvasBitmap);

      // Create rotation matrix
      Matrix rotateMatrix = new Matrix();
      rotateMatrix.setRotate(angle, canvas.getWidth()/2, canvas.getHeight()/2);

      //Draw bitmap onto canvas using matrix
      canvas.drawBitmap(arrowBitmap, rotateMatrix, null);

      return new BitmapDrawable(canvasBitmap); 
    }

Nowy zestaw SDK mówi, że

BitmapDrawable(canvasBitmap); 

jest przestarzałe. Jakieś alternatywy?

http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html


1
Co jest nie tak z „nowym BitmapDrawable (context.getResources (), canvasBitmap);”?
Reuben Scratton

Odpowiedzi:


201

Zamiast tego zrób to:

return new BitmapDrawable(context.getResources(), canvasBitmap);

OK, dzięki, wydaje się, że działa. Martwiłem się o to, że tam przestarzałe! Wygląda na to, że ikona jest większa, ale przyjrzę się temu dokładniej!
Lee Armstrong

7
@LeeArmstrong Wygląda na większy, ponieważ wykorzystuje obiekt zasobu do dostosowania obrazu do gęstości ekranu. Często wycofywanie metody oznacza, że ​​nie jest ona już właściwym sposobem robienia rzeczy, ale często jest implementowana, aby zachować zgodność wsteczną. Jednak Google nie zawsze wydaje się być przyjazny dla API, więc nie zdziwiłbym się, gdyby w przyszłości złamali starego konstruktora.
dniu

Muszę utworzyć nowy BitmapDrawable w metodzie statycznej klasy Tools. Nie mam dostępu do kontekstu. Jak mógłbym użyć tej metody w takim przypadku?
Marek

1
@Marek Myślę, że powinieneś otworzyć nowe pytanie z całym odpowiednim kodem źródłowym, w tym jak wywołujesz tę metodę. Być może wystarczy refaktoryzacja tej metody, aby przekazać do niej kontekst (lub zasoby).
dniu

2
Ten nowy konstruktor skaluje mapę bitową, co w wielu przypadkach nie jest pożądanym zachowaniem.
Moxor

2

Spróbuj tego raz.

  1. W aktywności

    BitmapDrawable background = new BitmapDrawable(this.getResources(), blurImageBg);
    
  2. W fragmentach

    BitmapDrawable background = new BitmapDrawable(getActivity(), blurImageBg);
    
  3. W adapterze lub innym

    BitmapDrawable background = new BitmapDrawable(context.getResources(), blurImageBg);
    

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.