如何在网格视图中显示2个重叠视图?

时间:2012-08-22 07:31:29

标签: android gridview adapter overlapping custom-view

我正在使用Gridview在屏幕上显示图像,目前我正在使用ImageAdapter将下载的图像加载到Gridview中。如果点击,我在所选图像的顶部绘制另一个图像以表示选择,问题是我必须通过RelaytiveLayout将它们作为子项添加,所以当我滚动图像时,保持它们的创建位置并且不跟随用滚动条。然后我尝试创建一个自定义视图,其中2个图像视图重叠,设置一个隐藏,另一个由适配器填充。选择后,计划是取消隐藏重叠图像。从适配器加载时,我的自定义视图(实际上必须扩展ViewGroup以包含两个图像视图,因为视图无法添加子视图)将加载一个可选择的框架,但是完全透明,两个图像都不显示。我知道它是可选择的,因为当我触摸屏幕时,我设置的尺寸中会出现一个蓝色框。为了显示自定义视图,我在publc getView()函数中加载了它。我是以错误的方式来做这件事的吗?我已经尝试了很多,看看是否有其他人做过这样的事情,但我能找到的只是在RelativeLayout上绘制重叠图像或将图像加载到GridView中的教程,但不是两者。道歉,我是Android的新手。

4 个答案:

答案 0 :(得分:0)

如果我没有错,当您点按时,gridView中的视图选择了所需的状态。我不认为在现有的基础上绘制另一个图像是必要的。您可以使用viewHolder模式更改现有视图背景本身,因为您使用自定义适配器。看看以下链接。你可能会知道怎么做。

Dynamically hiding Views in Custom Listview in Android

答案 1 :(得分:0)

在触控模式下,ListViews不会保留焦点(或选择)的视觉指示。只有在使用硬件键盘或控件导航UI时,才会看到此信息。

有关详细信息,请参阅Google Touch模式Android博客文章。

因此,如果您只使用触摸模式,您将永远不会在ListView上看到焦点或选择。

  

您正在做的事情会很好地修改。

  • 将ImageView(子)放在容器内(像RelativeLayout等父类)。
  • 将一些填充设置为父级,以使其背景可见。
  • 单击时更改单击项的父项背景(在GridView的OnClickListener的onClick()方法中)。
  • 在适配器上调用notifyDataSetChanged()(以重绘当前可见的项目)

这是一个示例代码:

    grid.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick (AdapterView<?> parent,
                    View v, int position, long Id)
            {
                    highlighted = position;    //highlighted is a global variable
                    //container is the root view of the list row layout
                    LinearLayout container = (LinearLayout)v.findViewById(R.id.container);
                    container.setBackgroundResource(R.drawable.highlighted_backg);
                    mGridAdapter.notifyDataSetChanged();

            }
   });

getView()方法的代码:

public View getView (int position, View convertView, ViewGroup parent)
{
    ViewHolder holder;

    if(convertView == null) {
        convertView = inflater.inflate(R.layout.row_item, null);
        holder = new ViewHolder();
        holder.itemName1 = (TextView)convertView.findViewById(R.id.text1);
        ...
        holder.container = (LineaLayout)convertView.findViewById(R.id.container);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    if(MainActivity.highlighted == position) {
        holder.container.setBackgroundResource(R.drawable.highlighted_backg);
    }else {
        holder.foodItemCol1.setBackgroundResource(R.drawable.normal_back);
    }

    return convertView;
}

答案 2 :(得分:0)

ImageView iv = (ImageView)v.findViewById(R.id.grid_item_image);
iv.setBackgroundResource(imageIDs[4]);
iv.setImageResource(imageIDs[2]); 

答案 3 :(得分:0)

您可以为所选的图片视图设置颜色过滤器,例如imageView.setColorFilter(Color.parse("#77000000"));(将其添加到ImageView onClick的{​​{1}}方法中),这将添加半透明所选onClickListener上的灰色图层已标识为已选中。

相关问题