2011-06-15 73 views
8

我使用setImageResource(R.drawable.icon1)ImageView設置了圖像。getImageResource()Android。這可能嗎?

現在我的要求是找出爲ImageView設置的圖像,並做一些處理。

if (imageView.getImageResource() == R.drawable.icon1) { 
    //do some processing 
else if (imageView.getImageResource() == R.drawable.icon2) { 
    //do somethign else 
else 
//display 

所以我想知道是否存在的方法(據我所知,事實並非如此),如果它不如何保持什麼樣的資源已經被設置爲的軌道ImageView

謝謝。 Sana。

+0

爲什麼不自己做它,如果你是一個做的設置? – Yuliy 2011-06-15 01:55:18

+0

我不會理解你想表達的內容。你可以解釋嗎。 – Sana 2011-06-15 02:01:36

+0

喬建議,我建議只需將設置的圖像的ID存儲在imageView的某個其他位置。 – Yuliy 2011-06-15 04:57:08

回答

6

你假設,因爲你把一個整數,你可以得到一個整數退了出來,這不是如何setImageResource()作品。見ImageView#setImageResource()。這對你來說只是一個方便的方法:Android在幕後正在做的是查找Drawable資源(大多數情況下,它是一個BitmapDrawable,但它可以是任何類型),然後將該資源作爲位圖對象(即,僅圖像數據 - 它不知道其原始「資源ID」以前是什麼)。

你最好的解決方案是將要跟蹤上次使用的資源ID:

imageView.setImageResource(R.drawable.image1); 
this.mLastResourceId = R.drawable.image1; 
// ... 

// Later, when checking the resource: 
if (this.mLastResourceId == R.drawable.image1) { 
    // Do something 
} 
-1

你應該可以使用Bundle並設置你需要的任何屬性。

Intent i = new Intent();  
Bundle extras = new Bundle(); 
     i.putExtra("prop", "value"); 
+0

咦?您必須考慮使用'imageView.setTag(Object)'方法。 – dmon 2011-06-15 04:00:18

0

另一種選擇,如果可能的話,將是子類的ImageView和整數存儲在一個重寫的setImageResource() 。

public class MyImageView extends ImageView { 
    int rememberId = -1; 
    @override void setImageResource(int resId){ 
    rememberId = resId; 
    } 
    int getMyResId(){ 
    return rememberId; 
    } 
} 
0
package com.widget; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.ImageButton; 

/** 
* custom star type imagebutton that can be obtain the background image resource 
* id. 
* 
* </p> your layout xml resource might be like the following code: <br> 
* <view class="com.widget.StarButton" <br> 
*  android:id="@+id/starButton" <br> 
*  android:layout_width="wrap_content" <br> 
*  android:layout_height="wrap_content" <br> 
*  android:background="@android:color/background_light" <br> 
*  android:paddingTop="10dp" <br> 
*  android:src="@drawable/star" /> <br> 
* 
* @author Jeffen 
* 
*/ 
public class StarButton extends ImageButton { 
private int mLastResourceId = -1; 

public StarButton(Context context) { 
    super(context); 
} 

public StarButton(Context context, AttributeSet attrs) { 
    this(context, attrs, android.R.attr.imageButtonStyle); 
} 

public StarButton(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    setFocusable(true); 
} 

/** 
* set image resource and sync image resource id. 
*/ 
@Override 
public void setImageResource(int resId) { 
    super.setImageResource(resId); 

    setImageResourceId(resId); 
} 

public int getImageResourceId() { 
    return mLastResourceId; 
} 

public void setImageResourceId(int resId) { 
    mLastResourceId = resId; 
} 

} 
5

您應該能夠使用標籤屬性,如下所示:

imageView.setImageResource(R.drawable.icon1); 
imageView.setTag(Integer.valueOf(R.drawable.icon1)); 

// later 

int drawable = (Integer) imageView.getTag(); 

switch(drawable) { 

    case R.drawable.icon1: 
     // do_something.... 
     break; 

    case R.drawable.icon2: 
     // do_something.... 
     break; 

    ... 
} 
+1

這是正確的答案 – 2015-07-27 17:21:56