【问题标题】:Get random images from specific folder从特定文件夹中获取随机图像
【发布时间】:2015-12-07 22:45:28
【问题描述】:

我有一个 android 应用程序,它从我的外部存储中生成 3 个随机图像。然后将我得到的随机图像设置为正在工作的 Imageview。问题是我不想查看每张图片,而只是从外部文件夹中的一个特定文件夹中获取随机图像。如何更改代码以获取此信息?

public class SuggestedOutfit extends AppCompatActivity{

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;
}

}

【问题讨论】:

  • 我不明白这个问题。从我可以从您的代码中看出,您正在做正确的事情。示例,1. 获取所有图像 URI。 2.随机选择一个。 3. 重复步骤 2 所需的次数。
  • @Squonk 是的,但我正在获取外部文件夹中的所有图片。我只想从外部文件夹中的“/Pictures/Wardrobe”中获取随机图像,但我不知道如何更改代码来获取它。
  • 我的链接前三个答案解决了你的问题
  • @ColinGillespie 是的,这个问题可能会帮助我显示整个文件夹,我也需要这样做,但是对于这个问题,我只需要选择 3 个随机图像并显示。不知道如何更改该代码

标签: android random android-external-storage


【解决方案1】:

我能想到的方法有 2 种,你几乎都可以做到:

  1. 就在这一行:

    imagesPath.add(cur.getString(dataColumn));

如果值是你想要的,你必须添加一个过滤器才能添加到数组中。例如:

do {
   String path = cur.getString(dataColumn);
   if(path.contains("/wardrobe/")){
      imagesPath.add(path);
   }
} while (cur.moveToNext());

您也许可以使if 更复杂一点,以确保不会遇到任何奇怪的边缘情况,但仅此而已。只有来自你想要的地方的图像被添加到数组中,然后你选择一个随机的。

  1. 或者,您也可以将适当的查询参数传递给getContentResolver().query,而不是简单地传递""

类似:

 getContenteResolver().query(
   images,
   projection,
   MediaStore.Images.Media.DATA + " contains /wardrobe/",
   null,
   "");

ps:(上面的这个SQL语句只是一个例子,它不会起作用,因为它没有正确转义,它只是一个指向正确方向的指针,以防你想在SQL中实现它查询)

但我个人会使用第一种方法。

【讨论】:

  • 你是最大的救生员!非常感谢。我不敢相信这就是我所需要的。
猜你喜欢
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
相关资源
最近更新 更多