首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有layerdrawable的Android imageview

具有layerdrawable的Android imageview
EN

Stack Overflow用户
提问于 2012-12-18 15:15:27
回答 1查看 1.4K关注 0票数 0

我的程序有一个网格视图,将imageview作为子视图。我想给用户反馈,当一个特定的图像视图被点击时,通过在原始图像上显示一个半透明层和一个刻度标记。我用的是三层的layerdrawable。我通过编写一个小应用程序对代码进行了测试,它工作得很好。但它在gridview中不起作用。

代码语言:javascript
复制
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,每次都会在顶部添加白色的半透明层。

请帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2013-02-02 06:51:33

我明白你的问题了。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13928109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档