2012-07-25 98 views
1

我試圖讓程序讓用戶導入自定義背景。返回圖像資源ID

下面是我在哪裏:

我有getDrawable功能以另一個函數作爲參數:

mDrawableBg = getResources().getDrawable(getImage()); 

的getImage()是假設返回一個整數引用選定的圖像,這裏是該功能的代碼(迄今爲止):

public int getImage(){ 

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("image/*"); 
    startActivityForResult(intent, 10); 

} 

這是假設打開圖庫並讓用戶選擇圖像。然後我會使用mDrawableBg來設置背景。我不知道如何將參考ID返回到所選圖像。有什麼建議麼?

+1

[獲取縮略圖Uri /存儲在SD卡+ Android中的圖像的路徑](http:// stackoverflow。com/questions/5548645/get-thumbnail-uri-path-of-the-image-stored-in-sd-card-android)你有沒有試過這個。 – BBdev 2012-07-25 05:58:53

+0

這些返回字符串作爲路徑,有沒有什麼辦法可以使用這些設置可繪製對象的背景? getDrawable()只接受整數參數。 – Mike 2012-07-25 06:15:32

回答

1

方式恐怕,你試圖做到這一點是不可能的。作爲一名新的Android開發人員您將要學習的一件事是活動之間的循環是如何工作的。在你的情況下,你正在運行一個Activity,它調用一個Intent從中獲取數據。但是,在Android API中,Intent只能在其自己的時間被引用。這意味着你不能像你嘗試過的那樣使用你的getImage()方法。

雖然有希望!

您首先需要做的是致電Intent。你會通過你現在有getImage()代碼做到這一點:

public void getImage() { // This has to be a void! 
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("image/*"); 
    startActivityForResult(intent, 10); 
} 

這種方法現在開始,你希望用戶從選擇圖片選擇器。接下來,你必須捕捉返回的內容。這不能從您的getImage()方法返回,而是必須從其他地方收集。

您必須實現以下方法:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     final int SELECT_PICTURE = 1; // Hardcoded from API 
     if (requestCode == SELECT_PICTURE) { 
      String pathToImage = data.getData().getPath(); // Get path to image, returned by the image picker Intent 
      mDrawableBg = Drawable.createFromPath(pathToImage); // Get a Drawable from the path 
     } 
    } 
} 

最後,而不是調用mDrawableBg = getResources().getDrawable(getImage());,只需調用getImage();。這將初始化圖像選擇器。

一些閱讀:

祝你好運!

+0

謝謝,這有幫助! – Mike 2012-07-25 06:36:14

+0

一個問題: 當您將pathToImage設置爲getPath(data.getData())時,是否與(data.getData())。getPath()相同?我無法像使用getPath那樣使用getPath。 – Mike 2012-07-25 16:47:58

+0

哎呀..是的,應該是。對於那個很抱歉。 – Eric 2012-07-25 17:28:55

1

我不知道,但如果你的意思是你不知道如何從意圖收到成效,您可以使用:

@Override 
    protected void onActivityResult(int requestCode,int resultCode,Intent data) 
    { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(resultCode == RESULT_OK) 
     { 
      if (requestCode == 10) 
      { 
       // DoSomething 
      } 
     } 
    } 
+0

我不太清楚處理Android的問題,這是我第一次嘗試在Android中進行編程。我只是想弄清楚如何修改上面的getImage()函數,以便將參考ID返回給用戶從手機畫廊中選擇的圖像。 – Mike 2012-07-25 06:08:26

+1

你的意思是你想讓getImage()函數返回圖像或其他東西嗎?那麼,startActivity()的結果會轉到onActivityResult。這意味着,如果調用startActivity(),函數getImage()結束,並且當用戶選擇圖像時,函數'onActivityResult()'被調用。 – Namnamseo 2012-07-25 06:15:49

+0

好的,這是否意味着我可以以某種方式重寫onActivityResult()以返回此引用ID?是否可以返回存儲在手機內部/閃存中的圖像的參考ID? – Mike 2012-07-25 06:19:07

2

試試這個:

String pathName = "selected Image path"; 
    Resources res = getResources(); 
    Bitmap bitmap = BitmapFactory.decodeFile(pathName); 
    BitmapDrawable bd = new BitmapDrawable(res, bitmap); 
    View view = findViewById(R.id.container); 
    view.setBackgroundDrawable(bd); 
+0

我不知道我會把它放在哪裏。我在與Android打交道方面很新,我仍然習慣於如何佈置所有東西。有什麼辦法可以直接修改我上面的函數來返回所選圖像的引用ID嗎? – Mike 2012-07-25 06:05:51