0

イメージビューの画像とグリッドビューの画像が一致すると、アルファ値が変更される Android でゲームを開発しています。一致する数が 4 の場合、イメージ ビューのイメージを変更し、グリッド ビューのイメージと再度比較する必要があります。

imageView.setImageResource(q); を使用して、imageview の画像を変更します。

画像は変更されますが、グリッド ビューは消えます。グリッド ビューをそのまま変更するにはどうすればよいか教えてください。

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.invalidateViews(); を使用する必要があります。だから変えて

  2. グリッドビュー画像を4回正しくクリックした後、グリッドビューでアルファ0を設定するのはなぜですか。したがって、行を削除するだけです

    gridView.setAlpha((float)0.0);

    //グリッドビューを非表示にするアルファの設定

したがって、コードは次のようになります

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 に答える