Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将单个图像覆盖在gridview阵列上_Android_Arrays_Gridview_Overlay - Fatal编程技术网

Android 将单个图像覆盖在gridview阵列上

Android 将单个图像覆盖在gridview阵列上,android,arrays,gridview,overlay,Android,Arrays,Gridview,Overlay,我已经创建了一个gridview,它现在填充了一组图像,它有9个图像,但计划放大。我正在尝试设置它,这样当我点击一个图像时,它会用一个图像(红色x)覆盖该图像。我发现了几个在gridview上覆盖图像的示例,但它们似乎都使用了另一个数组。我尝试将我的单个映像设置为数组,但似乎不起作用。我的McClickListner也在工作,我可以让第一张图片显示出来。正在考虑尝试用x填充整个网格并将其隐藏(不确定这是否是最好的方法) 现在它不工作,因为我正在尝试添加第二个图像 我的网格适配器 public c

我已经创建了一个gridview,它现在填充了一组图像,它有9个图像,但计划放大。我正在尝试设置它,这样当我点击一个图像时,它会用一个图像(红色x)覆盖该图像。我发现了几个在gridview上覆盖图像的示例,但它们似乎都使用了另一个数组。我尝试将我的单个映像设置为数组,但似乎不起作用。我的McClickListner也在工作,我可以让第一张图片显示出来。正在考虑尝试用x填充整个网格并将其隐藏(不确定这是否是最好的方法)

现在它不工作,因为我正在尝试添加第二个图像

我的网格适配器

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)
}