в моем приложении для Android, мне нужно показать миниатюры видео из каталога на sdcard. Я создаю эскизы с этим кодом:Показывать видео эскизы (растровые изображения) в Universal Image Loader
Bitmap bm = ThumbnailUtils.createVideoThumbnail(list.get(position).getPath()
.substring(8, list.get(position).getPath().length()), MediaStore.Images.Thumbnails.MINI_KIND);
, что требует времени для создания эскизов. если я делаю это в классе async, позиция списка повторяется и отображает неправильные значки.
Как мне это сделать?
Edit 1: асинхронной класс:
public class CreateThumbnail extends AsyncTask<Integer, Void, Void> {
Bitmap bm;
@Override
protected Void doInBackground(Integer... params) {
bm = ThumbnailUtils.createVideoThumbnail(list.get(params[0]).getPath()
.substring(8, list.get(params[0]).getPath().length()), MediaStore.Images.Thumbnails.MINI_KIND);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
imageView.setImageBitmap(bm);
}
}
Edit 2: метод GetView:
CheckBox checkBox;
ImageView imageView;
int pos = 0;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageEntity imageEntity = (ImageEntity) this.getItem(position);
pos = position;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_grid_video, null);
imageView = (ImageView) convertView.findViewById(R.id.image);
checkBox = (CheckBox) convertView.findViewById(R.id.CheckBox1);
convertView.setTag(new ViewHolder(imageView, checkBox));
checkBox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
ImageEntity imageEntity = (ImageEntity) cb.getTag();
imageEntity.setChecked(cb.isChecked());
if (imageEntity.isChecked()) {
txtCount.setText(String.valueOf(++count));
checkCounter(count);
} else {
txtCount.setText(String.valueOf(--count));
checkCounter(count);
}
}
});
}
else {
ViewHolder viewHolder = (ViewHolder) convertView.getTag();
checkBox = viewHolder.getCheckBox();
imageView = viewHolder.getImageView();
}
checkBox.setTag(imageEntity);
checkBox.setChecked(imageEntity.isChecked());
if (imageEntity.isVisibleCheckBoxes()) {
checkBox.setVisibility(View.VISIBLE);
} else {
checkBox.setVisibility(View.INVISIBLE);
}
imageView.setImageBitmap(ThumbnailUtils.createVideoThumbnail(list.get(position).getPath()
.substring(8, list.get(position).getPath().length()), MediaStore.Images.Thumbnails.MINI_KIND));
//new CreateThumbnail().execute(position);
return convertView;
}
Пожалуйста, покажите нам еще код. Пожалуйста, покажите нам метод getView в представлении списка. –
Отредактировано основная запись – Lithium
Hi @Lithium, Вы пытаетесь добиться чего-то подобного следующему? Если это так, вам может потребоваться изменить код. https://www.google.lk/imgres?imgurl=http://2.bp.blogspot.com/-m_BYkz7SJKU/UGzFxRU5WKI/AAAAAAAACwk/zh3sE3siqHU/s1600/Android%252BList%252BView%252BExample.PNG&imgrefurl=https : //www.javacodegeeks.com/2012/10/android-listview-example-with-image-and.html&h=566&w=797&tbnid=SO8MmT5jtOrP_M: & DocId = XyTJ9DsCkyU_9M & е = qe_4VqGlOtDHuATB2rHYCw & TBM = Isch & вед = 0ahUKEwjhney3_-LLAhXQI44KHUFtDLsQMwgtKBEwEQ –