我正在使用毕加索在RecyclerView中显示许多小的ImageView。 当我单击它们时,ImageView会将其图像更改500毫秒,并在500毫秒的处理程序结束时将其更改回。
这是代码:
Picasso.get().load(imageResources[position]).into(holder1.itemImageView);
holder1.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
final Context context = v.getContext();
Picasso.get().load(pressedResource[position]).into(holder1.itemImageView);
new Handler().postDelayed(new Runnable() {
public void run() {
Picasso.get().load(imageResources[position]).into(holder1.itemImageView);
}
}, 500);
new Thread(new Runnable() {
@Override
public void run() {
EventHandlerClass.startMediaPlayer(v, soundID);
}
}).start();
}
});
我使用Picasso来防止我的应用因内存不足而崩溃。 图像消失大约10毫秒,然后更改为另一个图像,在500毫秒后再次消失,然后又变回默认图像。 它仅在我第一次单击图像时消失,在此之后它不会消失。 我认为这是因为Picasso加载图像的速度太慢。 单击按钮时,是否可以先加载图像并显示它?
以下是一个GIF,显示了它的外观:https://media.giphy.com/media/STlGbpXvT8B9iBvnQS/giphy.gif 在这种情况下,它只消失一次,但有时一键消失两次。
图像全部为200x200,大约8kb。格式为.WEBP
如何防止这种情况?
答案 0 :(得分:1)
其想法是等待回调,然后将图像设置为图像视图。这是通过使用CallbackListener实现的。
Picasso.get().load(imageResources[position]).into(holder1.itemImageView);
holder1.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
final Context context = v.getContext();
Picasso.get().load(pressedResource[position]).into(holder1.itemImageViewnew com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
new Handler().postDelayed(new Runnable() {
public void run() {
Picasso.get().load(imageResources[position]).into(holder1.itemImageView);
}
}, 500);
new Thread(new Runnable() {
@Override
public void run() {
EventHandlerClass.startMediaPlayer(v, soundID);
}
}).start();
}
@Override
public void onError() {
}
}));
}
});