通过点击imageView生成随机图像

时间:2016-06-29 08:20:11

标签: java android random

当我点击imageView时,我只想从可绘制的图像生成随机图像。每当我运行此代码时,模拟器上的应用程序都会崩溃。这段代码有什么问题:

package com.example.surya.musicpleer;

import android.app.Activity;
import android.graphics.Typeface;
import android.support.v4.widget.TextViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.Random;

public class MainActivity extends Activity {

ImageView i1;
Random r = new Random();
int target = r.nextInt(3);
String drawablename = "photo" + target;

int resID = getResources().getIdentifier(drawablename, "drawable",  getPackageName());

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    i1 =(ImageView)findViewById(R.id.imageView);
    i1.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            i1.setImageResource(resID);
        }
    });
        }

}

1 个答案:

答案 0 :(得分:1)

我修改了你的代码只是复制&粘贴它,你的问题是你正在创建随机no& amp;从onCreate()方法

中访问资源
 package com.example.surya.musicpleer;

import android.app.Activity;
import android.graphics.Typeface;
import android.support.v4.widget.TextViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.Random;

public class MainActivity extends Activity {

    ImageView i1;
    Random r = new Random();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        i1 = (ImageView) findViewById(R.id.imageView);
        i1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                int target = r.nextInt(3);
                String drawablename = "photo" + target;

                int resID = getResources().getIdentifier(drawablename, "drawable", getPackageName());

                i1.setImageResource(resID);
            }
        });
    }
}

您需要将四个图像放入drawable中,如photo0到photo3

修改

不幸的是,没有任何方法可以获得imageview的绘制,但是您可以通过setTag()对imageview执行以下操作

i1.setImageResource(resID);
i1.setTag(resID); // this line is importent 

&安培;使用此方法获取该标记

private int getDrawableId(ImageView iv) {
    return (Integer) iv.getTag();
}

现在你可以比较上面方法返回的值,如果它们相同则意味着两个imageview都有相同的drawable。