123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- package com.edufound.android.xyyf.adapter;
- import android.annotation.TargetApi;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.drawable.Drawable;
- import android.media.MediaMetadataRetriever;
- import android.media.ThumbnailUtils;
- import android.net.Uri;
- import android.os.Build;
- import android.os.Handler;
- import android.os.Message;
- import android.provider.MediaStore;
- import android.support.annotation.NonNull;
- import android.support.v7.widget.CardView;
- import android.support.v7.widget.RecyclerView;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ImageView;
- import com.edufound.android.xyyf.R;
- import com.edufound.android.xyyf.ijkplayer.media.IjkVideoView;
- import com.edufound.android.xyyf.util.Logger;
- import com.edufound.android.xyyf.video.VideoPersenter;
- import java.util.HashMap;
- import tv.danmaku.ijk.media.player.IMediaPlayer;
- public class WindowVideoAdapter extends RecyclerView.Adapter<WindowVideoAdapter.WindowVideoApapterHolder> {
- private LayoutInflater mLayoutInflater;
- private Context mContext;
- private VideoPersenter.VideoJsonBean[] mVideoBean;
- private HashMap<String, Drawable> mVideoBitmap;
- Message holderMsg;
- public WindowVideoAdapter(Context context, VideoPersenter.VideoJsonBean[] beans, HashMap<String, Drawable> map) {
- mContext = context;
- mVideoBean = beans;
- mVideoBitmap = map;
- mLayoutInflater = LayoutInflater.from(context);
- // loadVideoBitmap();
- }
- @NonNull
- @Override
- public WindowVideoApapterHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
- Logger.e("WindowVideoApapterHolder");
- return new WindowVideoApapterHolder(LayoutInflater.from(mContext).inflate(R.layout.fragment_video, viewGroup, false));
- }
- @Override
- public void onViewAttachedToWindow(@NonNull WindowVideoApapterHolder holder) {
- super.onViewAttachedToWindow(holder);
- holder.showImage();
- return;
- }
- @Override
- public void onViewDetachedFromWindow(@NonNull WindowVideoApapterHolder holder) {
- holder.mVideoView.stopPlayback();
- // holder.mVideoView.seekTo(0);
- return;
- }
- @Override
- public void onBindViewHolder(@NonNull final WindowVideoApapterHolder holder, int i) {
- try {
- Logger.e("onBindViewHolder");
- // String url = AesUtil.Decrypt(mVideoBean[i].videourl);
- final String url = mVideoBean[i].videourl;
- // String url = "http://efunimgs.ai160.com/ott/test/002tPr2Xlx07oP7B4ro40104120022hP0k010.mp4";
- // String url = "https://www.apple.com/105/media/cn/iphone-x/2017/01df5b43-28e4-4848-bf20-490c34a926a7/films/feature/iphone-x-feature-cn-20170912_1280x720h.mp4";
- holder.mVideoView.setVideoURI(Uri.parse(url));
- Logger.e("url:" + url);
- holder.mVideoName = mVideoBean[i].videoname;
- holder.url = url;
- holder.mImageFrame.setBackground(mVideoBitmap.get(mVideoBean[i].videoid));
- holder.mImageFrame.setTag(mVideoBitmap.get(mVideoBean[i].videoid));
- // if (holder.mImageFrame.getTag() != null) {
- // holder.mImageFrame.setBackground((Drawable) holder.mImageFrame.getTag());
- // } else {
- // new Thread() {
- // @Override
- // public void run() {
- // super.run();
- // Drawable drawable = new BitmapDrawable(createVideoThumbnail(url, 200, 200));
- // holder.mImageFrame.setTag(drawable);
- // holderMsg = new Message();
- // holderMsg.what = 2;
- // holderMsg.obj = holder;
- // handler.sendMessage(holderMsg);
- // }
- // }.start();
- // }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
- public Bitmap createVideoThumbnail(String url, int width, int height) {
- Bitmap bitmap = null;
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- int kind = MediaStore.Video.Thumbnails.MINI_KIND;
- try {
- if (Build.VERSION.SDK_INT >= 14) {
- retriever.setDataSource(url, new HashMap<String, String>());
- } else {
- retriever.setDataSource(url);
- }
- bitmap = retriever.getFrameAtTime(1000);
- } catch (IllegalArgumentException ex) {
- // Assume this is a corrupt video file
- } catch (RuntimeException ex) {
- // Assume this is a corrupt video file.
- } finally {
- try {
- retriever.release();
- } catch (RuntimeException ex) {
- // Ignore failures while cleaning up.
- }
- }
- if (kind == MediaStore.Images.Thumbnails.MICRO_KIND && bitmap != null) {
- bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
- ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
- }
- return bitmap;
- }
- Handler handler = new Handler(new Handler.Callback() {
- @Override
- public boolean handleMessage(Message msg) {
- switch (msg.what) {
- case 1:
- // WindowVideoApapterHolder holder = (WindowVideoApapterHolder) msg.obj;
- // if (holder.mImageFrame.getTag() != null) {
- // holder.mImageFrame.setBackground((Drawable) holder.mImageFrame.getTag());
- // } else {
- // Drawable drawable = new BitmapDrawable(createVideoThumbnail(holder.url, 200, 200));
- // holder.mImageFrame.setTag(drawable);
- // holder.mImageFrame.setBackground(drawable);
- // }
- break;
- case 2:
- WindowVideoApapterHolder holder = (WindowVideoApapterHolder) msg.obj;
- Logger.e("设置--" + holder.mVideoName + "---图片");
- holder.mImageFrame.setBackground((Drawable) holder.mImageFrame.getTag());
- break;
- }
- return false;
- }
- });
- @Override
- public int getItemCount() {
- return mVideoBean.length;
- }
- public class WindowVideoApapterHolder extends RecyclerView.ViewHolder {
- String url;
- CardView mVideoCardView;
- IjkVideoView mVideoView;
- ImageView mImageFrame;
- String mVideoName;
- WindowVideoApapterHolder(View itemView) {
- super(itemView);
- mVideoCardView = itemView.findViewById(R.id.fragment_cardview);
- mVideoCardView.setRadius(50);
- mVideoView = itemView.findViewById(R.id.fragment_video);
- mVideoView.setRender(IjkVideoView.RENDER_TEXTURE_VIEW);
- mImageFrame = itemView.findViewById(R.id.fragment_image_frame);
- mImageFrame.setVisibility(View.GONE);
- mVideoView.setOnPreparedListener(new IMediaPlayer.OnPreparedListener() {
- @Override
- public void onPrepared(IMediaPlayer mp) {
- Logger.e("加载--" + mVideoName + "--完成了");
- // showImage();
- // mVideoView.start();
- // mVideoView.pause();
- // handler.sendEmptyMessageDelayed(1, 0);
- }
- });
- mVideoView.setOnErrorListener(new IMediaPlayer.OnErrorListener() {
- @Override
- public boolean onError(IMediaPlayer mp, int what, int extra) {
- Logger.e("WindowVideoAdapter---WindowVideoApapterHolder-onError");
- return false;
- }
- });
- mVideoView.setOnCompletionListener(new IMediaPlayer.OnCompletionListener() {
- @Override
- public void onCompletion(IMediaPlayer mp) {
- Logger.e("WindowVideoAdapter---WindowVideoApapterHolder-onCompletion");
- }
- });
- }
- Handler handler = new Handler(new Handler.Callback() {
- @Override
- public boolean handleMessage(Message msg) {
- switch (msg.what) {
- case 1:
- if (mVideoView.isPlaying() == false) {
- mVideoView.start();
- }
- if (mVideoView.getCurrentPosition() > 500) {
- mImageFrame.setVisibility(View.GONE);
- } else {
- handler.sendEmptyMessageDelayed(1, 0);
- }
- break;
- }
- return false;
- }
- });
- public void sendHanlder(int what) {
- handler.sendEmptyMessage(what);
- }
- public void start() {
- Logger.e("WindowVideoAdapter---WindowVideoApapterHolder--start");
- mVideoView.start();
- }
- public void stop() {
- Logger.e("WindowVideoAdapter---WindowVideoApapterHolder--stop");
- mVideoView.stopPlayback();
- }
- public void hideImage() {
- Logger.e("WindowVideoAdapter---WindowVideoApapterHolder--hideImage");
- // mImageFrame.setVisibility(View.GONE);
- handler.sendEmptyMessageDelayed(1, 1000);
- }
- public void showImage() {
- Logger.e("WindowVideoAdapter---WindowVideoApapterHolder--showImage");
- mImageFrame.setVisibility(View.VISIBLE);
- }
- }
- }
|