2011-06-15 117 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