【发布时间】:2015-12-04 01:59:04
【问题描述】:
我正在开发一个应用程序,一旦单击按钮,我就会转到一个新活动,其中 3 个随机图像设置为一个 imageView。如果用户不喜欢所选的 3 个图像,他们可以单击一个按钮以生成 3 个新的随机图像。我有两个问题...
我将 imageView 设置为特定大小,但是当图像显示时,它们有时会变小并且水平显示。我希望它们垂直显示,并且全部显示为 imageView 的大小。如何更改代码以执行此操作?
当我单击按钮时,我会显示新图像,但我收到错误消息,提示我执行几次后内存不足。如何更改代码以停止使用所有内存?
这是我的代码
public ImageView shirts;
public ImageView pants;
public ImageView shoes;
Button reload;
private Bitmap currentBitmap = null;
String[] projection = new String[]{
MediaStore.Images.Media.DATA,
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.suggested_outfit);
shirts = (ImageView)findViewById(R.id.shirtImage);
pants = (ImageView)findViewById(R.id.pantsImage);
shoes = (ImageView)findViewById(R.id.shoesImage);
shirts.setImageBitmap(getImage());
pants.setImageBitmap(getImage());
shoes.setImageBitmap(getImage());
reload = (Button)findViewById(R.id.getNewOutfit);
reload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
startActivity(getIntent());
}
});
}
public Bitmap getImage () {
Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Cursor cur = getContentResolver().query(images,
projection,"", null, ""
);
final ArrayList<String> imagesPath = new ArrayList<String>();
if (cur.moveToFirst()) {
int dataColumn = cur.getColumnIndex(
MediaStore.Images.Media.DATA);
do {
imagesPath.add(cur.getString(dataColumn));
} while (cur.moveToNext());
}
cur.close();
final Random random = new Random();
final int count = imagesPath.size();
int number = random.nextInt(count);
String path = imagesPath.get(number);
currentBitmap = BitmapFactory.decodeFile(path);
return currentBitmap;
}
}
我读到重新加载活动不是一个好习惯,但我想不出一种方法来生成 3 个新的随机图像。如果有更好的方法可以做到这一点,我愿意接受任何建议。
【问题讨论】: