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

Lee Armstrong
źródło
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);
na tym
źródło
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);
    
Surendar D.
źródło
1

Kod Kotlin dla BitmapDrawable:

var bitmapDrawable = BitmapDrawable(resources,bitmapObj)
Hamed Jaliliani
źródło