В моем приложении для Android я должен показывать различные видео с нашего сервера с миниатюрой. Миниатюра должна идти вместе с кнопкой воспроизведения. Когда мы нажимаем на кнопку воспроизведения, видео должно воспроизводиться. Я попробовал приведенный ниже код, но его нет отображение именно того, что я хочу, а также занимает некоторое время. Я не хочу использовать уменьшенное изображение, уже прикрепленное к видео, вместо этого просто создайте миниатюру во время выполнения.
public class AttachmentGridAdapter extends RecyclerView.Adapter<AttachmentGridAdapter.ViewHolder> {
List<Attachments> item = new ArrayList<Attachments>();
Context context;
private static LayoutInflater inflater=null;
private Typeface fontFamily;
public AttachmentGridAdapter(Context activity, List<Attachments> arrayList, Typeface fontFamily) {
item=arrayList;
context=activity;
this.fontFamily=fontFamily;
inflater = ( LayoutInflater )context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_attachment, parent, false);
final ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(final AttachmentGridAdapter.ViewHolder gridHolder, final int position) {
gridHolder.gridAttachmentItem=item.get(position);
try {
Bitmap bitmap = null;
try {
bitmap = retriveVideoFrameFromVideo(gridHolder.gridAttachmentItem.getUrl());
} catch (Throwable throwable) {
throwable.printStackTrace();
}
if (bitmap != null) {
bitmap = Bitmap.createScaledBitmap(bitmap, 240, 240, false);
gridHolder.imgAttachment.setImageBitmap(bitmap);
}
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public int getItemCount() {
return item.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
Attachments gridAttachmentItem;
ImageView imgExpAttachment;
public ViewHolder(View itemView) {
super(itemView);
imgExpAttachment=(ImageView) itemView.findViewById(R.id.imgExpAttachment);
}
}
public static Bitmap retriveVideoFrameFromVideo(String videoPath)
throws Throwable {
Bitmap bitmap = null;
MediaMetadataRetriever mediaMetadataRetriever = null;
try {
mediaMetadataRetriever = new MediaMetadataRetriever();
if (Build.VERSION.SDK_INT >= 14)
mediaMetadataRetriever.setDataSource(videoPath, new HashMap<String, String>());
else
mediaMetadataRetriever.setDataSource(videoPath);
bitmap = mediaMetadataRetriever.getFrameAtTime(1, MediaMetadataRetriever.OPTION_CLOSEST);
} catch (Exception e) {
e.printStackTrace();
throw new Throwable(
"Exception in retriveVideoFrameFromVideo(String videoPath)"
+ e.getMessage());
} finally {
if (mediaMetadataRetriever != null) {
mediaMetadataRetriever.release();
}
}
return bitmap;
}
}