我有一个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;
}
}
答案 0 :(得分:1)
我有两种方式可以想到,你几乎可以得到它的所有内容:
就在这一行:
imagesPath.add(cur.getString(dataColumn));
如果值是你想要的,你必须添加一个过滤器才能添加到数组中。例如:
do {
String path = cur.getString(dataColumn);
if(path.contains("/wardrobe/")){
imagesPath.add(path);
}
} while (cur.moveToNext());
你可以让if
更加复杂,以确保不会遇到任何奇怪的边缘情况,但这就是它。只有你想要的地方的图像才会被添加到数组中,然后你会随机选择一个。
或者您也可以将适当的查询参数传递给getContentResolver().query
,而不是简单地传递""
,
类似的东西:
getContenteResolver().query(
images,
projection,
MediaStore.Images.Media.DATA + " contains /wardrobe/",
null,
"");
ps:(上面的这个SQL语句只是一个例子,它不能正常工作,因为它没有被正确转义,只是指向正确方向的指针,以防你想在SQL中实现它查询)
但我个人会使用第一种方法。