Я разрабатываю приложение, которое после нажатия кнопки Я перехожу к новому действию, где 3 случайных изображения установлены на изображение. Если пользователю не нравятся выбранные 3 изображения, они могут нажать кнопку, чтобы создать 3 новых случайных изображения. У меня возникают две проблемы ...Получите новое случайное изображение при нажатии кнопки - android
У меня есть 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 новые случайные изображений. Я открыт для любых предложений, если есть лучший способ сделать это.
Не знаете, как сделать это, так как я перезарядить свою деятельность каждый раз при нажатии кнопки. Даже если я сохраню его в списке, не собирается ли он расшифровывать растровое изображение, потому что каждый раз я обновляю его? – Ashley
Зачем вам нужна перезагрузка, это дорогое поведение, каждый раз, когда активность воссоздает ОС Android, необходимо снова выделить ресурс. Вы можете создать произвольный битмап без перезапуска активности. Помимо размера растрового изображения может возникнуть проблема с OutOfMemory, попробуйте перемасштабировать размер растрового изображения – ResolutioN