0

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

4

4 回答 4

0

ListView 在触摸模式下不保留焦点(或选择)的视觉指示。只有当您使用硬件键盘或控件来导航您的 UI 时,您才会看到这一点。

有关更多详细信息,请参阅 Google触控模式 Android 博客文章。

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

您所做的只需稍作修改即可正常工作。

  • 将 ImageView(child) 放在容器内(父级,如 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;
}
于 2012-08-22T09:12:35.070 回答
0
ImageView iv = (ImageView)v.findViewById(R.id.grid_item_image);
iv.setBackgroundResource(imageIDs[4]);
iv.setImageResource(imageIDs[2]); 
于 2012-12-25T10:54:28.210 回答
0

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

在 Android 的自定义 Listview 中动态隐藏视图

于 2012-08-22T07:48:11.937 回答
0

例如,您可以为选定的图像视图设置颜色过滤器imageView.setColorFilter(Color.parse("#77000000"));(将其添加onClick到 ImageView 的方法中onClickListener),这将在选定的图像上添加一个半透明的灰色层ImageView以识别它被选中。

于 2015-07-31T02:55:43.453 回答