繁体   English   中英

单击按钮时获取新的随机图像-Android

[英]Get new random image when button is clicked - android

我正在开发一个应用程序,一旦单击按钮,我将进入一个新活动,其中将3个随机图像设置为imageView。 如果用户不喜欢所选的3张图像,则可以单击按钮以生成3张新的随机图像。 我有两个问题...

  1. 我已将imageView设置为特定大小,但是当图像显示出来时,它们有时会变小并水平显示。 我希望它们以imageView的大小垂直显示。 如何更改代码以执行此操作?

  2. 单击按钮时,我会显示新图像,但是几次操作后,我都说我的内存不足了。 如何更改代码,以便停止使用所有内存?

这是我的代码

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个新的随机图像。 如果有更好的方法,我愿意接受任何建议。

通过onClick方法获取图像将必须具有

do {
   String path = cur.getString(dataColumn);
   if(path.contains("yourDirectory")){ //in your case, your image directory
      imagesPath.add(path);
   }
} while (cur.moveToNext());

在要求的意图/活动范围内

解码位图会消耗大量内存,在您的代码上,单击按钮可能会导致OutOfMemory时,对位图进行多次解码。 尝试一次解码所有位图并将它们保存到列表中。 单击以生成随机位图时,将创建列表位图的随机索引并通过该索引检索对象。 希望有帮助!

您可以使用此工具: image loader它具有内存管理器。您可以在图像加载完成时设置imageview。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM