getImageResource()Android。这可能吗?

时间:2011-06-15 01:49:23

标签: android android-imageview

我使用ImageViewsetImageResource(R.drawable.icon1)设置了图片。

现在我的要求是找出为ImageView设置的图像是什么并进行一些处理。

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

所以我想知道是否存在一种方法(AFAIK,它不存在),以及它是否如何跟踪为ImageView设置的资源。

感谢。 萨纳。

5 个答案:

答案 0 :(得分:6)

你假设因为你输入了一个整数,你可以得到一个整数,而这不是setImageResource()的工作方式。见ImageView#setImageResource()。这只是一种方便的方法:Android在幕后做的是查找Drawable资源(在大多数情况下,它是BitmapDrawable,但它可以是任何类型),然后将该资源应用于ImageView作为位图对象(即仅图像数据 - 它不知道其原始的“资源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 :(得分:5)

您应该能够使用tag属性,如下所示:

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;

    ...
}

答案 2 :(得分:0)

如果可能,另一种替代方法是将ImageView子类化并将整数存储在重写的setImageResource()中。

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

答案 3 :(得分: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;
}

}

答案 4 :(得分:-1)

您应该能够使用Bundle并设置您需要的任何属性。

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