我正在开发一个示例应用程序,我需要在onClick侦听器中获取图像视图的资源,并将其与我知道存在的图像源进行比较。如果资源相同,我想启动另一个意图。我现在面临的问题是访问ImageView(以及它的资源Id整数)以与可绘制资源进行比较。
@Override
// should int be final ??
public View getView(final int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// This is not working and I need to find a way to solve this >>
if (((ImageView)v).getResources().getInteger(0) == R.drawable.imageToCompare)
{
// do nothing
}
else
{
// do something
}
答案 0 :(得分:3)
您无法从ImageView
获取可绘制的ID。但是如果你从代码中设置它,你也可以将它存储在某个地方,例如在标记字段中。看一下类似的问题:Who I compare an background Image resource TextView with a R.drawable.bg_image for switch。
答案 1 :(得分:2)
if(((ImageView)v).getDrawable().getConstantState() == MainActivity.this
.getResources().getDrawable(R.drawable.unlock)
.getConstantState()))
{
// Do Something
}
答案 2 :(得分:1)
正确的方法是使用setTag()
和getTag
。我猜你正在制作自己的适配器。
在方法public View getView(int position, View convertView, ViewGroup parent)
中,当您向其添加其他属性时,将标记设置为Imageview
。
ImageView temp = (ImageView) v.findViewById(resId);
temp.setImageResource(icon);
temp.setTag(icon); //drawable unique ID will be my identifier here
然后在onClick
中,您只需将View v
与您的drawable
ID进行比较即可。例如,我想在点击时更改图像,我用这种方式编码。 请注意我在设置新的drawable时如何更改标记
img.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if ((Integer)v.getTag() == R.drawable.current_img) {
v.setBackgroundResource(R.drawable.new_img);
v.setTag(R.drawable.new_img);
}
}
});
答案 3 :(得分:0)
你可以使用这个。
if((pic1.getDrawable().getConstantState() == getResources().getDrawable(R.drawable.addpics).getConstantState()))
{
//do something
}