При реализации палитры с моим GridView у меня возникают проблемы с прокруткой.Сбои с использованием палитры с GridView
В принципе, здесь ситуация: каждый из элементов в GridView имеет строку заголовка и изображение, которое загружается. С помощью палитры строка заголовка должна изменяться на извлеченный цвет, который извлекает палитра.
Но случается так, что каждый раз, когда я прокручиваю вниз по экрану сетки, а затем прокручиваю назад, позиционирование изменяется с цветом фона панели.
Вот пример:
Затем, когда я прокрутила и прокручивается снова:
Кроме того, окраска, кажется, не совсем правильно либо Имеет ли это? по какой-то причине похоже, что он просто выбирает последний загруженный цвет, а иногда даже не загружается, как вы можете видеть, глядя на бары.
Я делаю это в своем адаптере для альбома, вот код и, надеюсь, кто-то может вести меня в правильном направлении.
public class AlbumAdapterNew extends ArrayAdapter<String> {
ArrayList<String> names;
Activity context;
ArrayList<String> coverPaths;
String coverPath;
Drawable img;
Bitmap bitmap;
ViewHolder mViewHolder = null;
ImageLoader imageLoader = ImageLoader.getInstance();
private RelativeLayout background;
static class ViewHolder {
private TextView text;
private ImageView image;
}
public AlbumAdapterNew(Activity context, ArrayList<String> names,
ArrayList<String> coverPaths) {
super(context, R.layout.albums_row, names);
this.names = names;
this.context = context;
this.coverPaths = coverPaths;
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.displayer(new FadeInBitmapDisplayer(500))
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
context)
.defaultDisplayImageOptions(defaultOptions)
.build();
ImageLoader.getInstance().init(config); // Do it on Application start
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
mViewHolder = new ViewHolder();
LayoutInflater vi = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.albums_row, parent, false);
mViewHolder.text = (TextView) convertView
.findViewById(R.id.albumTextView);
mViewHolder.image = (ImageView) convertView
.findViewById(R.id.album_photo);
background = (RelativeLayout) convertView
.findViewById(R.id.containerText);
convertView.setTag(mViewHolder);
}
else {
mViewHolder = (ViewHolder) convertView.getTag();
}
mViewHolder.text.setText(names.get(position));
if (coverPaths.get(position) != null && !coverPaths.isEmpty()) {
mViewHolder.image.setScaleType(ScaleType.CENTER_CROP);
Glide.with(context).load("file:///" + coverPaths.get(position))
.asBitmap()
.into(new BitmapImageViewTarget(mViewHolder.image) {
@Override
protected void setResource(Bitmap resource) {
// Do bitmap magic here
Palette.from(resource).generate(
new Palette.PaletteAsyncListener() {
public void onGenerated(Palette palette) {
Palette.Swatch vibrantSwatch = palette
.getVibrantSwatch();
if (vibrantSwatch != null) {
background
.setBackgroundColor(vibrantSwatch
.getRgb());
}
}
});
super.setResource(resource);
}
});
} else {
mViewHolder.image.setScaleType(ScaleType.CENTER_INSIDE);
imageLoader.displayImage("drawable://" + R.drawable.music_record,
mViewHolder.image);
}
return convertView;
}
}
Выполняется ли ваш код через 'if (coverPaths.get (position)! = Null &&! CoverPaths.isEmpty())' для каждой ячейки при прокрутке вверх? Возможно, нет, и это может быть проблемой (поскольку «Палитра» используется только там). – shkschneider
Почему бы не пройти это снова? это не имеет большого смысла для меня. – Jack
Моя идея заключалась в том, что переработанное представление было неправильным или что исходное изображение было неправильным. Но это была просто идея, у меня нет точного ответа, поэтому простой комментарий :) – shkschneider