Android中的自定义视图的屏幕截图生成空白图像

时间:2018-08-17 10:58:00

标签: android imageview picasso

我有一个视图MyCustomView,它扩展了FrameLayout。该视图在其中动态创建图像视图。

private void setModel(Model m) {
   for (Element elem : m.getImageElements()) {
       elem.iv = new ImageView();
       addView(elem.iv);
   }

   ...
   // Load images into the image views
   int count = 0;
   for (Element elem : m.getImageElements()) {
        Picasso.with(mContext)
                .load("file://" + elem.photo.getLocalUri())
                .skipMemoryCache()
                .noFade()
                .into(elem.iv, new Callback() {
                    @Override
                    public void onSuccess() { 
                        // When all images have been downloaded successfully 
                        if (++count == m.getImageElements().size) {
                            generatePreview(this, m.getId());
                        }
                    }

                    @Override
                    public void onError() {
                    }
                });
    }
}

private static Drawable generatePreview(View targetView, int id) {
        Bitmap b = Bitmap.createBitmap(targetView.getLayoutParams().width,
                targetView.getLayoutParams().height,
                Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(b);
        targetView.draw(c);
        File sdCard = Environment.getExternalStorageDirectory();
        File file = new File(sdCard, "image-preview" + id + ".jpg");
        FileOutputStream fos;
        try {
            fos = new FileOutputStream(file);
            b.compress(Bitmap.CompressFormat.JPEG, 95,fos);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

我正在MyCustomView中使用上面的RecyclerView

@Override
public void onBindViewHolder(final MyViewHolder holder) {
    ...
    holder.mCustomView.setModel(model);
    ...
 }

问题是某些行的预览图像显示为空白(透明),这似乎表明drawMyCustomView的{​​{1}}期间{{即使generatePreview MyCustomView被调用,也没有绘制1}}。

我尝试将Picasso块放在onSuccess中,然后在generatePreview之后调用它,但是对于某些行也失败了。

0 个答案:

没有答案