首页 > 解决方案 > 如何比较选定 ImageView 对象中的图像?

问题描述

我正在尝试制作一个基本的糖果迷恋游戏。我有 9x9 的网格布局,可以imageviews.Images在每次执行时混合使用。现在,当我正确运行算法时,有两张图像,我将重新制作它们。如果选定的图像视图包含相同的图像,用户将获得每个选定图像的 10 分。问题是如何比较和选择多个图像视图?这些 ImageViews 有 onclick 按钮,但我如何比较它们?

这是我尝试过的

public class MainActivity extends AppCompatActivity {
    TextView scoreText;
    ImageView imageView1,imageView2,imageView3,imageView4,imageView5,
            imageView6, imageView7,imageView8,imageView9;
    ImageView[]imageArray;
    int[]images;
    //Handler handler;
    //Runnable runnable;
    Drawable x,y;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView1=findViewById(R.id.imageView1);
        imageView2=findViewById(R.id.imageView2);
        imageView3=findViewById(R.id.imageView3);
        imageView4=findViewById(R.id.imageView4);
        imageView5=findViewById(R.id.imageView5);
        imageView6=findViewById(R.id.imageView6);
        imageView7=findViewById(R.id.imageView7);
        imageView8=findViewById(R.id.imageView8);
        imageView9=findViewById(R.id.imageView9);
        images= new int[]{R.drawable.grapes,R.drawable.lemon};
        imageArray= new ImageView[]{imageView1, imageView2, imageView3, imageView4,
                imageView5, imageView6, imageView7, imageView8, imageView9};
        ImageSet();
    }
    public void ImageSet()
    {

        for(int j=0;j<imageArray.length;j++)
        {
            Random r =new Random();
            int i=r.nextInt(2-0);
            imageArray[j].setImageResource(images[i]);
        }
    }
    public void image1(View view)
    {

    }
    public void image2(View view)
    {

    }
    public void image3(View view)
    {

    }
    public void image4(View view)
    {

    }
    public void image5(View view)
    {

    }
    public void image6(View view)
    {

    }
    public void image7(View view)
    {

    }
    public void image8(View view)
    {

    }
    public void image9(View view)
    {

    }

 }

标签: javaandroidandroid-imageview

解决方案


I think the better way is creating imageViews dinamically in code and add it to layout for example:

       for(int i=0;i<ar.lenght;i++) {
            ImageView imageView = new ImageView(activity);
            imageView.setImageDrawable(ar[i]);
            imageView.setOnClickListener((view)->{});
            yourLayout.addView(imageView);
        }

Or you can inflate them with your properties. And you can add tag or id to identify them. But in you case you should to store in your class a last number and compares it with current clicked image and after two clicks nullify it.

Maybe something like this would help...

        Integer lastClickedImageId;
        for(int i=0;i<ar.lenght;i++) {
            ImageView imageView = new ImageView(activity);
            imageView.setImageDrawable(ar[i]);
            imageView.setId(i);
            imageView.setOnClickListener((view)->{
                if(lastClickedImageId==null){
                    lastClickedImageId=imageView.getId();
                } else {
                    if(lastClickedImageId.equals(imageView.getId())){
                        //TODO hide cards?
                        lastClickedImageId=null;
                    }
                }
            });

推荐阅读