一旦更改了imageview图像,网格视图将保持不变

时间:2013-09-17 16:31:41

标签: android android-layout

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

我使用imageView.setImageResource(q);

更改了imageview中的图像

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

我试过gridView.invalidateViews();但是徒劳无功我还创建了一个具有相同上下文的新imageadapter,但它仍然无效。任何帮助都会非常棒!

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


    }
}

1 个答案:

答案 0 :(得分:0)

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

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

    gridView.setAlpha((浮点)0.0);

    //设置alpha导致gridview不可见

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

    if ((++i) == 4) {
    p++;
    final Integer q = mImageIds[rgenerator.nextInt(mImageIds.length)];
    ImageView imageView = (ImageView) iv;
    iv.setImageResource(q);
    i = 0;
    gridView.invalidateViews();
    }
    
    希望这会有所帮助 感谢

相关问题