GPUImageView рендеринг пустым после прокрутки в ListView Android
Я использую GPUImageView
компонент от android-gpuimage Библиотека для отображения изображений (с примененным к ним фильтром) в моем ListView
,
Изображения загружаются отлично с фильтрами в первый раз в моем ListView
но когда я прокручиваю вниз ListView
, все прокрученные ячейки отображаются пустыми.
Вот код getView(...)
метод моего обычая BaseAdapter
:
@Override
public View getView(int position, View convert_view, ViewGroup arg2) {
// TODO Auto-generated method stub
if(convert_view == null)
{
if(inflater == null)
inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convert_view = inflater.inflate( R.layout.filter_item , null);
}
TextView thumb_file_name_tv = (TextView) convert_view.findViewById(R.id.filter_item_thumb_tv);
GPUImageView thumb_giv = (GPUImageView) convert_view.findViewById(R.id.filter_item_thumb_giv);
Log.d(TAG, "Image Uri = "+imageUri);
thumb_file_name_tv.setText(""+filterNames.get(position).toString().trim());
thumb_giv.setFilter(new GPUImageSepiaFilter());
thumb_giv.setImage(imageUri); // this loads image on the current thread, should be run in a thread
thumb_giv.requestRender();
return convert_view;
}
Пожалуйста, скажите мне, что я делаю не так здесь?
Любая помощь высоко ценится.
2 ответа
Прошло много времени с тех пор, как я использовал эту библиотеку, но насколько я помню, если вы измените изображение в представлении, вам нужно позвонить deleteImage()
до настройки нового изображения.
Попробуйте вызвать этот метод перед вызовом setImage()
Возможно, вам придется проверить, есть ли в представлении изображение, прежде чем вы сможете позвонить deleteImage()
или это может привести к ошибке.
Редактировать:
Добавьте следующие методы к GPUImageView.java
класс библиотеки android-gpuImage:
public void deleteImage()
{
mGPUImage.deleteImage();
}
В новой версии GPUImage метод deleteImage () не существует, я делаю следующее, и он работал отлично.
@BindView(R.id.editor)
GPUImageView mEditor;
Внутри OnClick, который изменяет растровое изображение, сделайте следующее:
mEditor.getGPUImage().deleteImage();
mEditor.setImage(newBitmap);
Таким образом, я удаляю предыдущее растровое изображение и могу без проблем применять новое растровое изображение.