我的程序有一个gridview,其中包含imageview(s)作为子视图。我想通过在原始图像上显示半透明图层和刻度标记来点击特定图像视图时向用户提供反馈。我正在使用3层图层。我通过编写一个小应用程序来测试代码,它运行得很好。但它在gridview内部不起作用。
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
baseimage = ((ImageView)v).getDrawable(); //This is the original image thumbnail
layers = new Drawable[3];
layers[0] = baseimage;
layers[1] = white_color;// white_color is a ColorDrawable with colour = 2147483647
layers[2] = tick_mark;
if(!selected[(int)id])//selected is a boolean array to store if an imageview is selected or not
{
Toast.makeText(this,"selected",Toast.LENGTH_SHORT).show();
//layers[1].setVisible(true,true);
//layers[2].setVisible(true,true);
translucent = new LayerDrawable(layers);
((ImageView)v).setImageDrawable(translucent);
v.invalidate();
selected[(int)id] = true;
}
else
{
//((ImageView)v).setImageDrawable(baseimage);
//layers[1].setVisible(false,true);
//layers[2].setVisible(false,true);
translucent.invalidateSelf();
v.invalidate();
((ImageView)v).setImageDrawable(null);
((ImageView)v).setImageDrawable(baseimage);
Toast.makeText(this,((ImageView)v).getDrawable().toString(),Toast.LENGTH_SHORT).show();
selected[(int)id] = false;
}
}
当我运行代码时,第一次正确显示了layerdrawable,而当我再次单击它时,imageview显示没有变化。如果我第三次点击它,新的图层可添加到已经存在的图层中,白色半透明图层每次都会添加到顶部。
请帮帮我。
答案 0 :(得分:0)
我看到了你的问题。
第一次输入onItemClick()
时,baseimage=v.getDrawable()
只是一张图片。但是,第二次调用onItemClick()
时,baseimage=v.getDrawable()
可能代表图像+白色+刻度叠加。因此,即使if(!selected[(int)id])
案例执行,您仍会看到叠加层。