我正在使用 Gridview 将图像显示到屏幕上,目前正在使用 ImageAdapter 将下载的图像加载到 Gridview 中。如果被点击,我将在所选图像上绘制另一个图像以表示选择,问题是我必须通过 RelaytiveLayout 将它们添加为子级,因此当我滚动图像时,它们会停留在它们创建的位置并且不跟随与卷轴。所以我然后尝试创建一个自定义视图,其中 2 个图像视图重叠,设置一个隐藏,另一个由适配器填充。选择后,计划是取消隐藏重叠图像。从适配器加载时,我的自定义视图(实际上必须扩展 ViewGroup 以包含两个图像视图,因为视图无法添加子视图)将加载一个可选择的框架,但完全透明,没有图像显示。我知道它是可选择的,因为当我触摸屏幕时,我设置的尺寸中会出现一个蓝色框。为了显示自定义视图,我在 publc getView() 函数中加载它。我会以错误的方式解决这个问题吗?我已经尝试了很多,看看是否有其他人做过类似的事情,但我能找到的只是在 RelativeLayout 上绘制重叠图像或将图像加载到 GridView 中的教程,但不是两者兼而有之。抱歉,我是 Android 新手。但我能找到的只是在 RelativeLayout 上绘制重叠图像或将图像加载到 GridView 中的教程,但不是两者兼而有之。抱歉,我是 Android 新手。但我能找到的只是在 RelativeLayout 上绘制重叠图像或将图像加载到 GridView 中的教程,但不是两者兼而有之。抱歉,我是 Android 新手。
问问题
1076 次
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 模式更改现有视图背景本身。看看下面的链接。你可能会知道该怎么做。
于 2012-08-22T07:48:11.937 回答
0
例如,您可以为选定的图像视图设置颜色过滤器imageView.setColorFilter(Color.parse("#77000000"));
(将其添加onClick
到 ImageView 的方法中onClickListener
),这将在选定的图像上添加一个半透明的灰色层ImageView
以识别它被选中。
于 2015-07-31T02:55:43.453 回答