我有一个简单的回收站视图,其中包含一个自定义的ImageGLSurfaceView,其中显示了一个位图。如果我有一个简单的imageview,我会很容易地使用(毕加索或滑翔等)。但我有ImageGLSurfaceView所以我想做的是模仿ImageLoader lib类。所以我有ImageLoader类,它有loadImage方法,我从recycleler视图的适配器调用,我在hashmap中缓存/存储ImageGLSurfaceView对象,并像下面一样处理它:
public void loadImage(final FilteredImage filteredImage, final ImageGLSurfaceView imageView) {
if(images.containsKey(filteredImage)) {
images.get(filteredImage).setImageBitmap(filteredImage.getBitmap());
images.get(filteredImage).setFilterWithConfig(filteredImage.getFilter());
} else {
images.put(filteredImage, imageView);
imageView.setSurfaceCreatedCallback(new ImageGLSurfaceView.OnSurfaceCreatedCallback() {
@Override
public void surfaceCreated() {
imageView.setImageBitmap(filteredImage.getBitmap());
imageView.setFilterWithConfig(filteredImage.getFilter());
}
});
}
}
但是列表很慢或我认为它是在列表滚动上再次重新创建ImageGLSurfaceView对象。或者我应该将surfaceCreatedCallback放在后台线程上。所以我决定将RxJava用于此目的。我想订阅要创建的ImageGLSurfaceView,一旦创建它,然后设置Image位图,不要再创建ImageGLSurfaceView。如果这是实现这一目标的正确方法,请指导我?或者我应该彻底改变代码吗?