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

时间:2015-12-04 01:59:05

标签: android image random

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

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

  2. 当我点击按钮时,我正在显示新图像但是我收到一条错误,说我做了几次后我的内存不足。如何更改代码以便停止使用我的所有内存?

  3. 这是我的代码

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

3 个答案:

答案 0 :(得分:1)

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

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

在请求的意图/活动中

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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