使用透明图像更新gridview位置

时间:2012-02-22 11:15:47

标签: android

我有一个gridview设置,其中包含如下图像列表:

    public int[] tb =
{ R.drawable.tb1, R.drawable.tb2, R.drawable.tb3, R.drawable.tb4,
        R.drawable.tb5, R.drawable.tb6, R.drawable.tb7, R.drawable.tb8,
        R.drawable.tb9, R.drawable.tb10, R.drawable.tb11, R.drawable.tb12,
        R.drawable.tb13, R.drawable.tb14, R.drawable.tb15, R.drawable.tb16,
        R.drawable.tb17, R.drawable.tb18 };

我知道如何通过更改数组中的位置来更新特定图像。

tb[2] = R.drawable.image;

然后使用

    mAdapter.notifyDataSetChanged();

但我的问题是,我想更新网格视图中的图像并设置alpha以使图像透明。现在使用普通的图像视图,就像执行

一样简单
    ImageView iv = (ImageView) findViewById(R.id.aTest);
iv.setAlpha(127);

但是如何将其应用于网格视图中的特定图像。图像存储为一组整数,并使用ImageAdapter应用图像。所以这意味着我不能只做

tb[0].setAlpha(127);

因为它不能将其识别为图像视图。我知道我可以在适配器Alpha中设置imageView,但这意味着所有图像都是透明的,我只想让少数几个透明

所以有人可以告诉我如何设置它以便我可以更改列表中的一个图像并使其透明。我已经设置了onClickItemListener,所以暂时尝试设置它,所以当我单击网格视图中的项目时,该图像将变为透明。

尝试了很多不同的解决方案,但似乎无法找到有效的方法。如果有人能指出我正确的方向,我将非常感激!!

1 个答案:

答案 0 :(得分:1)

没有简单的方法可以解决这个问题,但是你去了 -

  • 以这种方式修改getView中的Adapter。 (我假设您有一个自定义适配器,否则您将不得不写一个。请参阅此example了解如何执行此操作)

    public View getView(int position, View convertView, ViewGroup parent) {        
        ImageView imageView;        
        if (convertView == null) {  
            //create new image view
        } else {            
            // resuse
        }        
    
        imageView.setImageResource(mThumbIds[position]);       
    
        // new code starts
        if(clickedLocation == position){
            imageView.setAlpha(alphaValue)
        }
        // new code ends
    
        return imageView;    
    }
    
  • onClickListener项目的位置存储为clickedLocation

  • 现在在invalidateViews()对象上调用GridView方法。

警告:(可能不是最佳方式)

  • 每次点击都会重绘整个GridView,您可能会看到闪烁效果
  • 如果你的资源是jpg或png,那么他们需要每次都需要解码