Android从Picasso到Bitmap Array获取图像

时间:2016-10-26 16:34:45

标签: android bitmap picasso

我想从我的String []获取带有链接的Bitmap []。但这不符合我的要求。我有这个方法:

private Bitmap[] getBitmaps(String[] images){
    ArrayList<Bitmap> temp = new ArrayList<>();
    for(int i = 0; i < images.length; i++){
        ImageView img = new ImageView(getContext());
        FrameLayout.LayoutParams x = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        img.setLayoutParams(x);
        Picasso.with(getContext()).load(MainPostAdapter.USER_URL+images[i]+".png").into(img, new Callback() {
            @Override
            public void onSuccess() {
                temp.add(BitmapRes.drawableToBitmap(img.getDrawable()));
                movableBackgroundContainer.removeView(img);
            }

            @Override
            public void onError() {

            }
        });
        movableBackgroundContainer.addView(img);
    }
    return temp.toArray(new Bitmap[temp.size()]);
}

问题是我得到一个空数组,因为它在onSuccess函数之后将Bitmap添加到列表中。我怎么能等到所有onSuccess添加位图然后返回?

2 个答案:

答案 0 :(得分:4)

毕加索的get()功能可以满足您的需求。它下载了一个Bitmap,而不是将图像加载到ImageView中。请注意,无法在主线程上调用Picasso的 String[] images = new String[] {"http://path.to.image1.jpg", "http://path.to.image2.jpg"}; new AsyncTask<String[], Void, List<Bitmap>>() { @Override protected List<Bitmap> doInBackground(String[]... params) { try { List<Bitmap> bitmaps = new ArrayList<Bitmap>(); for (int i = 0; i < params[0].length; ++i) { bitmaps.add(Picasso.with(getActivity()).load(params[0][i]).get()); } return bitmaps; } catch (IOException e) { return null; } } @Override public void onPostExecute(List<Bitmap> bitmaps) { if (bitmaps != null) { // Do stuff with your loaded bitmaps } } }.execute(images); 方法。我的示例使用AsyncTask在单独的线程上下载图像。

otherwise

答案 1 :(得分:1)

每次成功都可以增加一个整数,直到整数等于images.lengh()。你可以用循环来检查这个。并且在循环中是返回中的if子句。

例如

int currentSuccess = 0;

在循环中:

     @Override
            public void onSuccess() {
                temp.add(BitmapRes.drawableToBitmap(img.getDrawable()));
                movableBackgroundContainer.removeView(img);
                currentSuccess++;
            }

回归:

 while(true){
     if(currentSuccess == images.length){
        return temp.toArray(new Bitmap[temp.size()]);
     }
}

希望有所帮助。