2014-04-15 146 views
9

ALL,創建從位圖繪製

如建議here我需要從我的位圖中繪製一個drawable。但是,當我試圖使用:

Drawable d = new Drawable(my_bmp); 

它表明此構造有利於棄用:

Drawable(Bitmap bmp, int resourceId) 

我可以否則怎麼做出來繪製的位圖?

謝謝。

+0

你可以試試這個'Drawable d = new BitmapDrawable(res,bmp);'? –

+0

@SimplePlan,正如我在原始線程中寫的,位圖來自雲,而不是資源。 – Igor

+0

然後您必須從雲端下載該圖像,然後加載爲Drawable。 –

回答

18

您可以使用

Drawable d = new BitmapDrawable(getResources(), my_bmp); 

可拉伸性,它包裝一個位圖,可以平鋪,拉伸,或 對齊。您可以通過文件路徑,輸入 流,通過XML通脹或從位圖對象創建BitmapDrawable。

BitmapDrawable(Resources res, Bitmap bitmap)

從位圖創建可繪製,設定基於 資源的顯示量度初始目標密度。

又找一個公共構造@

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

+0

你回答告訴我你沒有看原件帖子。 ;-)我不從資源加載我的位圖。我從雲中獲取位圖作爲照片。因此我不能在該代碼中使用資源引用。任何其他想法? – Igor

+0

@Igor你從未在你的帖子中提到過。這不是我的錯。 – Raghunandan

+0

但是,我在那裏提到了這個要求,引用了我原來的問題的鏈接。就像我說的 - 你沒有看。 ;-) – Igor

0

可以使用BitmapDrawable類從位圖

Bitmap Drawable參考

+0

嗯,我不行。我沒有使用資源,位圖(照片)來自雲。 – Igor

1

BitmapDrawable(Bitmap bitmap)構造已經deprecated得到一個可繪製

可以使用

Drawable drawable = new BitmapDrawable(getResources(), bitmap); 

source

+0

嗯,我不能。我正在閱讀雲端位圖。 – Igor

+0

@Igor從雲中獲取bitmpa:'Bitmap bitmap = BitmapFactory.decodeStream(new URL(url).openConnection()。getInputStream());'' – Kinka

3

試試這個加載BitmapBitmap Drawable

像下面

Drawable d = null; 

    public Drawable ImgDrawableFromFile(Resources res, String file_name) { 

     myBitmap = null; 
     File imgFile = new File(
       "/data/data/yourpkgname/app_my_sub_dir/images/" + file_name); 
     if (imgFile.exists()) { 

      myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 

      if (myBitmap != null) { 
       d = new BitmapDrawable(res, myBitmap); 
       return d; 
      } else { 
       return null; 
      } 
     } 
     return null; 

    } 

既然叫像

這個函數創建
1

晚會有點晚,但我看到一個明顯的誤解。所提供的答案確實是正確的:

Drawable d = new BitmapDrawable(getResources(),bitmap); 

在這種情況下getResources()ContextActivity可用的方法,並且僅用於找出屏幕密度,並相應地調整可繪製。

因此,即使您從雲中加載圖像,Igor仍然可以調用getResources()。

快樂編碼

0

如果莫羅Banze是遲到了,然後我真的不知道我還在這裏幹什麼。但是對於那些急切尋找解決方案的人來說,這裏是我所做的:

當從JavaFX將項目引入Android時,我偶然發現了同樣的問題。我想重複使用大部分只能管理和提供數據並且對UI沒有任何影響的「數據」類。

夠了講故事,在這裏我們去:

問題:

  • 在某些時候,我們需要一個Drawable走出位圖在屏幕上。
  • 我們要(從雲,互聯網或其它地方)此位圖下載和以後使用它保存爲Drawable
  • 我們不能這樣做,在非Context或非Activity類,我們需要Resources

那麼,爲什麼我們不將其保存爲Bitmap,直到我們需要它來繪製(這肯定會在ContextActivity類發生)。

我創建了一個名爲BitmapImage的類。它看起來像這樣:

public class BitmapImage { 

private final Bitmap bitmap; 

public BitmapImage (Bitmap bitmap) { 
    this.bitmap = bitmap; 
} 


public Bitmap getBitmap() { 
    return bitmap; 
} 

public Drawable getDrawable(Resources res) { 
    return new BitmapDrawable(res,getBitmap()); 
} 

非常簡單的類「拯救」的位圖。因此,您可以使用Drawable來處理BitmapImage,直到您真的非常需要Drawable

在這一點上,你應該在你的ActivityContext,那裏你可以撥打Drawable foo = anyBitmapImage.getDrawable(getResource())