当我点击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);
}
});
}
}
答案 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。