0

我正在Android中开发一个游戏,一旦imageview中的图像和网格视图中的图像匹配,alpha值就会改变。如果匹配数等于 4,我需要更改 imageview 中的图像并再次与网格视图中的图像进行比较。

我使用 imageView.setImageResource(q); 更改图像视图中的图像;

图像发生变化,但网格视图消失。你能告诉我我需要做什么才能让网格视图完好无损吗?

我试过 gridView.invalidateViews(); 但徒劳无功。我还创建了一个具有相同上下文的新图像适配器,但它仍然无法正常工作。任何帮助都会非常棒!

package com.example.despicablemehunt;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {

     final public Integer[] mThumbIds = {
                R.drawable.icon1, R.drawable.icon2,
                R.drawable.icon3, R.drawable.icon4,
                R.drawable.icon1, R.drawable.icon2,
                R.drawable.icon3, R.drawable.icon4,
                R.drawable.icon1, R.drawable.icon2,
                R.drawable.icon3, R.drawable.icon4,
                R.drawable.icon1, R.drawable.icon2,
                R.drawable.icon3, R.drawable.icon4

        };
     int i=0;
     int p=0;
     final Integer q=0;
     public Context mContext;
     List<Integer> imagesArrayList = new ArrayList<Integer>(Arrays.asList(mThumbIds));
     Integer [] tempArrayList;
     public static final Random rgenerator = new Random();
     public static final Integer[] mImageIds = 
        { R.drawable.icon1, R.drawable.icon2, R.drawable.icon3,R.drawable.icon4 };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        final long time=  System.currentTimeMillis();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Collections.shuffle(imagesArrayList);
        tempArrayList =   (Integer[])(imagesArrayList.toArray(new Integer[imagesArrayList.size()]));

         final GridView gridView = (GridView) findViewById(R.id.grid_view);

            // Instance of ImageAdapter Class
            gridView.setAdapter(new ImageAdapter(this));

            final Integer q = mImageIds[rgenerator.nextInt(mImageIds.length)];
            final ImageView iv = (ImageView) findViewById(R.id.imageView1);
            iv.setImageResource(q);

            gridView.setOnItemClickListener(new OnItemClickListener() {

                @SuppressLint("NewApi")
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                    // TODO Auto-generated method stub


                      if(getResources().getDrawable(q).getConstantState().equals(getResources().getDrawable(tempArrayList[arg2]).getConstantState()))
                      {
                          if(p==5)
                          {
                            /*final long time1=  System.currentTimeMillis();
                            if ((time1-time)> 20)
                            {

                            }*/
                              Toast.makeText(getApplicationContext(), "DONE DONE DONE", Toast.LENGTH_SHORT).show();
                          }
                          arg1.setAlpha((float) 0.4);
                          if((++i)== 4)
                          {
                              gridView.setAlpha((float)0.0);
                              p++;


                             final Integer q = mImageIds[rgenerator.nextInt(mImageIds.length)];
                            ImageView imageView = (ImageView) iv;
                            imageView.setImageResource(q);
                             i=0;
                            gridView.invalidate();
                          }


                      }
                }
            });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public class ImageAdapter extends BaseAdapter {


        // Keep all Images in array


        // Constructor
        public ImageAdapter(Context c){
            mContext = c;
        }

        @Override
        public int getCount() {
            return mThumbIds.length;
        }

        @Override
        public Object getItem(int position) {
            return mThumbIds[position];
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }



        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView = new ImageView(mContext);
            imageView.setImageResource(tempArrayList[position]);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setLayoutParams(new GridView.LayoutParams(50, 50));
            return imageView;
        }


    }
}
4

1 回答 1

0
  1. 要刷新 gridview,您必须使用 gridView.invalidateViews(); 所以改变它

  2. 在 4 正确单击 gridview 图像后,为什么要在 gridview 中设置 alpha 0。所以只需删除该行

    gridView.setAlpha((float)0.0);

    //设置alpha导致gridview不可见

所以你的代码应该是这样的

if ((++i) == 4) {
p++;
final Integer q = mImageIds[rgenerator.nextInt(mImageIds.length)];
ImageView imageView = (ImageView) iv;
iv.setImageResource(q);
i = 0;
gridView.invalidateViews();
}

希望这会有所帮助谢谢

于 2013-09-17T19:16:00.440 回答