Android 将单个图像覆盖在gridview阵列上
我已经创建了一个gridview,它现在填充了一组图像,它有9个图像,但计划放大。我正在尝试设置它,这样当我点击一个图像时,它会用一个图像(红色x)覆盖该图像。我发现了几个在gridview上覆盖图像的示例,但它们似乎都使用了另一个数组。我尝试将我的单个映像设置为数组,但似乎不起作用。我的McClickListner也在工作,我可以让第一张图片显示出来。正在考虑尝试用x填充整个网格并将其隐藏(不确定这是否是最好的方法) 现在它不工作,因为我正在尝试添加第二个图像 我的网格适配器Android 将单个图像覆盖在gridview阵列上,android,arrays,gridview,overlay,Android,Arrays,Gridview,Overlay,我已经创建了一个gridview,它现在填充了一组图像,它有9个图像,但计划放大。我正在尝试设置它,这样当我点击一个图像时,它会用一个图像(红色x)覆盖该图像。我发现了几个在gridview上覆盖图像的示例,但它们似乎都使用了另一个数组。我尝试将我的单个映像设置为数组,但似乎不起作用。我的McClickListner也在工作,我可以让第一张图片显示出来。正在考虑尝试用x填充整个网格并将其隐藏(不确定这是否是最好的方法) 现在它不工作,因为我正在尝试添加第二个图像 我的网格适配器 public c
public class EasyGridAdapter extends BaseAdapter {
private int[] easyPics;
private int[] overlayPics; //used for overlay ...this is just created here
Context myContext;
public EasyGridAdapter(Context myContext, int easyPics[], int overlayPics[]){
//sets gridadapter to use pics , if had text under pic would need to add after int[] pics
// name EasyGridAdapter is name ot the java class
this.myContext = myContext;
this.easyPics = easyPics;
this.overlayPics = overlayPics;
}
@Override
public int getCount() {
return easyPics.length;
}
@Override
public Object getItem(int position) {
return easyPics[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View grid = convertView;
if (convertView == null){
LayoutInflater inflater = (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //not sure what for
grid = inflater.inflate(R.layout.custom_easy, null);
}
//main view
ImageView iv = (ImageView) grid.findViewById(R.id.ivPics); //ivPics is android id name of imageviewer in custom easy xml
ImageView ol = (ImageView) grid.findViewById(R.id.overlayImage);
iv.setImageResource(easyPics[position]); //easypics is the interger from above
ol.setImageResource(overlayPics[position]);
return grid; //returns grid which is name of grid on activity_main.xml (with all stuff in it)
}
**my custom xml file**
<ImageView
android:id="@+id/ivPics"
android:layout_width="150dp"
android:layout_height="150dp"
app:srcCompat="@drawable/e1"
/>
<!--added to overlay image when item clicked.-->
<ImageView
android:id="@+id/overlayImage"
android:layout_width="150dp"
android:layout_height="150dp"
app:srcCompat="@drawable/x"
android:visibility="gone"
/>
1) 从您的GridView
中删除/注释onItemClickListener
:
2) 我假设您使用的是RelativeLayout
作为custom\u easy.xml
的父级修改getView()
方法如下:
public class Holder
{
RelativeLayout rlParent;
ImageView iv;
ImageView ivOverlay;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View grid = convertView;
final Holder holder=new Holder();
if (convertView == null){
LayoutInflater inflater = (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //not sure what for
grid = inflater.inflate(R.layout.custom_easy, null);
}
//main view
holder.rlParent = (RelativeLayout) grid.findViewById(R.id.yourParentLayout);
holder.iv = (ImageView) grid.findViewById(R.id.ivPics); //ivPics is android id name of imageviewer in custom easy xml
holder.ol = (ImageView) grid.findViewById(R.id.overlayImage);
holder.iv.setImageResource(easyPics[position]); //easypics is the interger from above
holder.relParent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.ol.setVisibility(View.VISIBLE);
}
});
return grid; //returns grid which is name of grid on activity_main.xml (with all stuff in it)
}
希望这能有所帮助。为什么不在xml文件中添加隐藏的覆盖图像,然后单击显示该图像呢?我尝试将其添加到自定义xml文件中,并在MainActivity.xml文件中添加为隐藏图像,然后单击显示。但是它只显示在我的布局的顶部,不管我点击哪个图像,它总是在同一个位置。你必须为gridview使用自定义布局。如果你愿意,我可以展示。很抱歉,我必须参加一个会议。但是我已经有一个自定义布局了。我要添加到该布局中还是创建第二个?我想我的大部分自定义布局都张贴在上面。谢谢你。我回来了。我正在尝试将覆盖图像添加到custom.xml文件中。我将把编辑过的代码发回原始问题。但它现在尝试加载时正在崩溃。
public class EasyGridAdapter extends BaseAdapter {
private int[] easyPics;
private int[] overlayPic; //used for overlay ...this is just created here
Context myContext;
public EasyGridAdapter(Context myContext, int easyPics[], int overlayPic []){
//sets gridadapter to use pics , if had text under pic would need to add after int[] pics
// name EasyGridAdapter is name ot the java class
this.myContext = myContext;
this.easyPics = easyPics;
this.overlayPic = overlayPic;
}
@Override
public int getCount() {
return easyPics.length;
// return overlayPic.length;
}
@Override
public Object getItem(int position) {
// return easyPics[position]; //wored with just easypics
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View grid = convertView;
if (convertView == null){
LayoutInflater inflater = (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //not sure what for
grid = inflater.inflate(R.layout.custom_easy, null);
}
//main view
ImageView iv = (ImageView) grid.findViewById(R.id.easyPics); //EasyPics is android id name of imageviewer in custom easy xml
ImageView ol = (ImageView) grid.findViewById(R.id.overlayPic);
iv.setImageResource(easyPics[position]); //easypics is the interger from above
ol.setImageResource(overlayPic[position]);
return grid; //returns grid which is name of grid on activity_main.xml (with all stuff in it)
}
public class Holder
{
RelativeLayout rlParent;
ImageView iv;
ImageView ivOverlay;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View grid = convertView;
final Holder holder=new Holder();
if (convertView == null){
LayoutInflater inflater = (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //not sure what for
grid = inflater.inflate(R.layout.custom_easy, null);
}
//main view
holder.rlParent = (RelativeLayout) grid.findViewById(R.id.yourParentLayout);
holder.iv = (ImageView) grid.findViewById(R.id.ivPics); //ivPics is android id name of imageviewer in custom easy xml
holder.ol = (ImageView) grid.findViewById(R.id.overlayImage);
holder.iv.setImageResource(easyPics[position]); //easypics is the interger from above
holder.relParent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.ol.setVisibility(View.VISIBLE);
}
});
return grid; //returns grid which is name of grid on activity_main.xml (with all stuff in it)
}