我使用ImageView
为setImageResource(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
设置的资源。
感谢。 萨纳。
答案 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");