我正在使用Gridview在屏幕上显示图像,目前我正在使用ImageAdapter将下载的图像加载到Gridview中。如果点击,我在所选图像的顶部绘制另一个图像以表示选择,问题是我必须通过RelaytiveLayout将它们作为子项添加,所以当我滚动图像时,保持它们的创建位置并且不跟随用滚动条。然后我尝试创建一个自定义视图,其中2个图像视图重叠,设置一个隐藏,另一个由适配器填充。选择后,计划是取消隐藏重叠图像。从适配器加载时,我的自定义视图(实际上必须扩展ViewGroup以包含两个图像视图,因为视图无法添加子视图)将加载一个可选择的框架,但是完全透明,两个图像都不显示。我知道它是可选择的,因为当我触摸屏幕时,我设置的尺寸中会出现一个蓝色框。为了显示自定义视图,我在publc getView()函数中加载了它。我是以错误的方式来做这件事的吗?我已经尝试了很多,看看是否有其他人做过这样的事情,但我能找到的只是在RelativeLayout上绘制重叠图像或将图像加载到GridView中的教程,但不是两者。道歉,我是Android的新手。
答案 0 :(得分:0)
如果我没有错,当您点按时,gridView
中的视图选择了所需的状态。我不认为在现有的基础上绘制另一个图像是必要的。您可以使用viewHolder模式更改现有视图背景本身,因为您使用自定义适配器。看看以下链接。你可能会知道怎么做。
答案 1 :(得分:0)
在触控模式下,ListViews不会保留焦点(或选择)的视觉指示。只有在使用硬件键盘或控件导航UI时,才会看到此信息。
有关详细信息,请参阅Google Touch模式Android博客文章。
因此,如果您只使用触摸模式,您将永远不会在ListView上看到焦点或选择。
您正在做的事情会很好地修改。
这是一个示例代码:
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
上的灰色图层已标识为已选中。