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);

Таким образом, я удаляю предыдущее растровое изображение и могу без проблем применять новое растровое изображение.

Другие вопросы по тегам