Прежде всего, да, я знаю об этом вопросе, но ответ мне не помогает. Да, это решает проблему «изменения положения при прокрутке», но это не очень оптимальное решение моей проблемы. Позволь мне объяснить...
Итак, это мой getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
UnscaledImageView imageView;
if(convertView == null) {
imageView = new UnscaledImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(mIconSize, mIconSize));
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imageView.setImageResource(mThumbIds[position]);
} else {
imageView = (UnscaledImageView)convertView;
}
return imageView;
}
И распространенным решением было бы переместить imageView.setImageResource(mThumbIds[position]);
за пределы и ниже оператора if
. Но это создает другую проблему...
Как вы могли заметить, я использую UnscaledImageView
вместо ImageView
. Это пользовательский подкласс ImageView
, в котором я переопределил метод setImageResource()
для ручного декодирования растровых изображений с некоторыми дополнительными параметрами в соответствии с моими потребностями. Ручное декодирование - вот что вызывает мою проблему.
Если метод setImageResource()
останется внутри if
, нет проблем, декодирование растрового изображения будет выполнено один раз для растрового изображения (во время загрузки GridView), и прокрутка будет плавной... Но изображения будут прыгать в разные позиции при каждой прокрутке .
Но если метод setImageResource()
останется за пределами if
, изображения не будут переходить на разные позиции, а все изображения будут постоянно декодироваться при каждом прокрутке. Прокрутка будет прерывистой и совсем не плавной.
Как я могу решить эту проблему? Любые идеи?