0

我的程序有一个 gridview,其中 imageview(s) 作为子视图。我想在单击特定图像视图时通过在原始图像上显示半透明图层和刻度线来向用户提供反馈。我正在使用具有 3 层的 layerdrawable。我通过编写一个小应用程序测试了代码,它运行良好。但它在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 显示没有变化。如果我第三次单击它,则会将一个新的 layerdrawable 添加到已经存在的 layerdrawable 中,每次都会在顶部添加白色半透明图层。

请帮我。

4

1 回答 1

0

我看到了你的问题。

第一次进入的时候onItemClick()只是baseimage=v.getDrawable()一张图片。但是,第二次onItemClick()调用 时,baseimage=v.getDrawable()可能表示图像 + 白色 + 刻度覆盖。因此,即使if(!selected[(int)id])案例执行,您仍然会看到覆盖。

于 2013-02-01T22:51:32.793 回答