我有一个视图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);
...
}
问题是某些行的预览图像显示为空白(透明),这似乎表明draw
中MyCustomView
的{{1}}期间{{即使generatePreview
MyCustomView
被调用,也没有绘制1}}。
我尝试将Picasso
块放在onSuccess
中,然后在generatePreview
之后调用它,但是对于某些行也失败了。