2010-02-21 96 views
4

我有以下問題:關於混合「URI/INT ID」圖像需要建議環境

假設到現在爲止,我使用R.drawable.img與

設置場景中的一些imageviews
imgView.setImage(aProduct.getImgId()); 

簡化的產品類別是這樣的:

class Product{ 
     int imgId; 

     .... 
     public void setImgId(int id){ 
     this.imgId=id; 
     } 

     public int getImgId(){ 
     return this.imgId 
     } 

     ... 




    } 

我的應用程序現在是「演變」的,因爲用戶可以添加定製產品 從攝像頭拍攝img並獲取圖片的Uri。 並設置在ImageView的imgView.setImgURI(URI)

現在我的問題是圖像: 這將是擁有混合INT /烏里圖像資源環境的最佳方法? 我可以獲得「R.drawable.img」的Uri嗎?

我不知道如果我的問題是清楚的,我的意思是:

我要檢查,之前設置ImageView的,如果我的產品有一個URI或一個int標識, 然後再做一個「如果「調用適當的方法,還是有更簡單的解決方案?

謝謝您的閱讀,並對我的英語感到抱歉。

問候。

+0

確定,因爲沒有人回答,我決定繼續前進,並採取辦法 一切都是一個-URI。所以現在,而不是管理內部產品類我處理Uri 但是,我在做這樣的事情時有問題(示例代碼): Uri uri = Uri.parse(「android.resource:// my .package.name /「+ R.drawable.image); imgView.setImageURI(uri); 圖像只顯示空白... 和logcat上我可以看到 02-22 17:00:19.352:INFO/System.out(1717):resolveUri在錯誤的位圖上失敗uri:android.resource:// my.package.here/2130837520 有什麼想法,我做錯了什麼? 謝謝 – Qlimax 2010-02-22 17:19:28

+0

你似乎是在正確的方向,並希望代碼工作。你也可以嘗試格式uri = Uri.parse(「android.resource://my.package.name/drawable/image」); 如果您遇到困難,請查看Resources類是否可以幫助您http://developer.android.com/reference/android/content/res/Resources.html – dparnas 2010-02-22 22:59:20

+0

uri = Uri.parse(「android。資源://my.package.name/drawable/image「); 產生相同的行爲... 看着資源類,我找不到有用的東西我的目的...我很沮喪,這些都是必須工作的東西,開發人員不應該失去2天解決這類問題,DAMN !!!關於這個主題的文檔是尷尬的......(幾乎沒有) – Qlimax 2010-02-23 19:17:34

回答

1

你的問題是,基本上有3種類型的圖像資源:

  • R.id...資源:內部資源,比如你把res文件夾
  • 內容的URI圖標:本地文件或內容提供商資源,例如content://file:///sdcard/...
  • 遠程文件URL的:網絡上的圖像,例如http://...

您正在尋找一種方式來繞過一個標識符可以對付所有。我的解決方案是傳遞字符串:或者是URI的toString(),或者只是R.id整數的字符串表示。

我用下面的代碼,例如,對付這一點,使代碼工作與它:

public static FastBitmapDrawable returnAndCacheCover(String cover, ImageRepresentedProductArtworkCreator artworkCreator) { 
    Bitmap bitmap = null; 
    Uri coverUri = null; 
    boolean mightBeUri = false; 
    //Might be a resId. Needs to be cached. //TODO: problem: resId of default cover may not survive across versions of the app. 
    try { 
     bitmap = BitmapFactory.decodeResource(Collectionista.getInstance().getResources(), Integer.parseInt(cover)); 
    } catch (NumberFormatException e) { 
     //Not a resId after all. 
     mightBeUri=true; 
    } 
    if(bitmap==null || mightBeUri){ 
     //Is not a resId. Might be a contentUri. 
     try { 
      coverUri = Uri.parse(cover); 
     } catch (NullPointerException ne) { 
      //Is null 
      return null; 
     } 
    } 
    if(coverUri!=null){ 
     if(coverUri.getScheme().equals("content")){ 
      //A contentUri. Needs to be cached. 
      try { 
       bitmap = MediaStore.Images.Media.getBitmap(Collectionista.getInstance().getContentResolver(), coverUri); 
      } catch (FileNotFoundException e) { 
       return null; 
      } catch (IOException e) { 
       return null; 
      } 
     }else{ 
      //Might be a web uri. Needs to be cached. 
      bitmap = loadCoverFromWeb(cover); 

     } 
    } 
    return new FastBitmapDrawable(bitmap); 
} 

你可能有興趣接手的邏輯部分。當然cover是這裏所討論的字符串。

忘記android.resource://作爲R.id...整數的替代品。索賠正在進行它不起作用:http://groups.google.com/group/android-developers/browse_thread/thread/a672d71dd7df4b2d

要了解如何實施loadCoverFromWeb,請查看其他問題或ping我。這個網站的東西是它自己的一個領域。

(基於GPLv3的代碼了我的應用程序的Collectionista:https://code.launchpad.net/~pjv/collectionista/trunk