Commit 342d51290cc38d7a7786d9b6b4563b1d2e401b0f

Authored by 韩亚云
1 parent bc7a1017

图库添加视频全屏预览

core/imageload/build.gradle
... ... @@ -33,4 +33,5 @@ dependencies {
33 33 implementation project(path: ':cloud:user')
34 34 implementation project(path: ':core:app_qr')
35 35 implementation project(path: ':core:network')
  36 + implementation project(path: ':cloud:video')
36 37 }
... ...
core/imageload/src/main/java/com/cnlive/core/imagepreview/ImageDrawee.java
... ... @@ -13,6 +13,12 @@ import com.bumptech.glide.request.target.Target;
13 13 import com.cnlive.core.imageload.R;
14 14 import com.cnlive.core.imagepreview.indexui.ProgressUI;
15 15 import com.github.chrisbanes.photoview.PhotoView;
  16 +import com.libs.video.util.cache.PreloadManager;
  17 +import com.libs.video.video.exoplayer.component.DefaultErrorView;
  18 +import com.libs.video.video.exoplayer.component.DefaultYoukuPrepareView;
  19 +import com.libs.video.video.exoplayer.controller.StandardVideoController;
  20 +import com.libs.video.video.exoplayer.controller.TikTokController;
  21 +import com.libs.video.video.exoplayer.play.CNVideoView;
16 22  
17 23 import androidx.annotation.NonNull;
18 24 import androidx.annotation.Nullable;
... ... @@ -24,16 +30,20 @@ import androidx.annotation.Nullable;
24 30 public class ImageDrawee extends FrameLayout {
25 31 private PhotoView imageView;
26 32 private ProgressUI progressUI;
  33 + private ViewData viewData;
27 34  
28   - public ImageDrawee(@NonNull Context context) {
  35 + public ImageDrawee(@NonNull Context context,ViewData viewData) {
29 36 super(context);
  37 + this.viewData = viewData;
30 38 init();
31 39 }
32 40  
33 41 private void init() {
34 42 // 添加 imageView
35   - imageView = new PhotoView(getContext());
36   - addView(imageView);
  43 + if(viewData.getType() == 1){
  44 + imageView = new PhotoView(getContext());
  45 + addView(imageView);
  46 + }
37 47 }
38 48  
39 49 public void setProgressUI(ProgressUI progressUI) {
... ... @@ -87,7 +97,7 @@ public class ImageDrawee extends FrameLayout {
87 97 // }
88 98 // }
89 99 // 调用 setImageDrawable(null) 方法,然后 GC 会完成图片的回收
90   - imageView.setImageDrawable(null);
  100 + if(imageView != null)imageView.setImageDrawable(null);
91 101 // 手动调用 GC(但是 GC 并不一定是马上执行的,只能说是加速 GC 回收)
92 102 // System.gc();
93 103 }
... ... @@ -100,38 +110,32 @@ public class ImageDrawee extends FrameLayout {
100 110 if (obj == null) {
101 111 return;
102 112 }
  113 + if(viewData.getType() == 1){
  114 + Glide.with(getContext())
  115 + .load(obj)
  116 + .listener(new RequestListener<Drawable>() {
  117 + @Override
  118 + public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
  119 + callback.onLoadFailed();
  120 + return false;
  121 + }
  122 +
  123 + @Override
  124 + public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
  125 + callback.onLoadSucceed(resource);
  126 + return false;
  127 + }
  128 + })
  129 + .error(R.drawable.preview_zwtp)
  130 + .into(imageView);
  131 + }else if(viewData.getType() == 2){
  132 +
  133 + }
103 134  
104   - Glide.with(getContext())
105   - .load(obj)
106   - .listener(new RequestListener<Drawable>() {
107   - @Override
108   - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
109   - callback.onLoadFailed();
110   - return false;
111   - }
112   -
113   - @Override
114   - public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
115   - callback.onLoadSucceed(resource);
116   - return false;
117   - }
118   - })
119   - .error(R.drawable.preview_zwtp)
120   - .into(imageView);
121   -// if (obj instanceof Drawable) {
122   -// Glide.with(getContext()).load(obj).into(imageView);
123   -//// imageView.setImageDrawable((Drawable) obj);
124   -// } else if (obj instanceof Bitmap) {
125   -// imageView.setImageBitmap((Bitmap) obj);
126   -// } else if (obj instanceof Integer) {
127   -// imageView.setImageResource((Integer) obj);
128   -// } else {
129   -// Log.e("ImageDrawee", "Unable to identify picture resources.");
130   -// }
131 135 }
132 136  
133 137 public float getScale() {
134   - return imageView.getScale();
  138 + return imageView == null?1f:imageView.getScale();
135 139 }
136 140  
137 141 public void setScale(float scale) {
... ...
core/imageload/src/main/java/com/cnlive/core/imagepreview/ImagePreView.java
... ... @@ -27,6 +27,10 @@ import com.cnlive.core.imagepreview.listener.OnItemClickListener;
27 27 import com.cnlive.core.imagepreview.listener.OnItemLongPressListener;
28 28 import com.cnlive.core.imagepreview.viewpager.ImagePagerAdapter;
29 29 import com.cnlive.core.imagepreview.viewpager.ImageViewPager;
  30 +import com.libs.video.video.exoplayer.controller.StandardVideoController;
  31 +import com.libs.video.video.exoplayer.play.CNVideoView;
  32 +import com.libs.video.video.exoplayer.util.L;
  33 +import com.libs.video.video.exoplayer.util.PlayerUtils;
30 34  
31 35 import java.util.ArrayList;
32 36 import java.util.List;
... ... @@ -88,6 +92,9 @@ public class ImagePreView extends FrameLayout implements ViewPager.OnPageChangeL
88 92 private OnItemChangedListener mItemChangedListener;
89 93 private OnDragStatusListener mDragStatusListener;
90 94 private OnBrowseStatusListener mBrowseStatusListener;
  95 + private CNVideoView videoView;
  96 + private StandardVideoController mController;
  97 +
91 98  
92 99 public ImagePreView(@NonNull Context context) {
93 100 super(context);
... ... @@ -117,6 +124,10 @@ public class ImagePreView extends FrameLayout implements ViewPager.OnPageChangeL
117 124 a.recycle();
118 125 }
119 126 }
  127 + videoView = new CNVideoView(context);
  128 + mController = new StandardVideoController(getContext());
  129 + mController.addDefaultControlComponent("", false);
  130 + videoView.setVideoController(mController);
120 131 initView();
121 132 }
122 133  
... ... @@ -146,6 +157,7 @@ public class ImagePreView extends FrameLayout implements ViewPager.OnPageChangeL
146 157  
147 158 @Override
148 159 public void onPageSelected(int position) {
  160 + startPlay(position);
149 161 if (showIndex && indexUI != null && mSourceList != null) {
150 162 indexUI.handleItemChanged(position, mSourceList.size());
151 163 }
... ... @@ -159,6 +171,19 @@ public class ImagePreView extends FrameLayout implements ViewPager.OnPageChangeL
159 171  
160 172 }
161 173  
  174 + private void startPlay(int position) {
  175 + videoView.release();
  176 + PlayerUtils.removeViewFormParent(videoView);
  177 + if(mSourceList.get(position).getType() == 1){
  178 +
  179 + }else if(mSourceList.get(position).getType() == 2){
  180 + getCurrentItem().removeAllViews();
  181 + getCurrentItem().addView(videoView);
  182 + videoView.setUrl("http://ffyl.vods2.cnlive.com/223/vod/2018/1120/223_88c98ab1395f4762b703fbdd9d59d2e5/ff80808166c2a45201672f14a9933131_800.m3u8");
  183 + videoView.start();
  184 + }
  185 + }
  186 +
162 187 public ImagePreView imageData(@NonNull List list) {
163 188 if (mSourceList == null) {
164 189 mSourceList = new ArrayList<ViewData>();
... ... @@ -167,6 +192,11 @@ public class ImagePreView extends FrameLayout implements ViewPager.OnPageChangeL
167 192 }
168 193 for (int i = 0, len = list.size(); i < len; i++) {
169 194 ViewData vd = new ViewData(list.get(i));
  195 + if (i == 0){
  196 + vd.setType(2);
  197 + }else {
  198 + vd.setType(1);
  199 + }
170 200 mSourceList.add(vd);
171 201 }
172 202 return this;
... ... @@ -346,6 +376,7 @@ public class ImagePreView extends FrameLayout implements ViewPager.OnPageChangeL
346 376 * 取消浏览
347 377 */
348 378 public void cancel() {
  379 + videoView.onDestroy();
349 380 cancel(null);
350 381 }
351 382  
... ... @@ -412,8 +443,9 @@ public class ImagePreView extends FrameLayout implements ViewPager.OnPageChangeL
412 443 }
413 444 }
414 445 if (drawee == null) {
415   - drawee = new ImageDrawee(container.getContext());
  446 + drawee = new ImageDrawee(container.getContext(),mSourceList.get(position));
416 447 drawee.setProgressUI(progressUI);
  448 + if(mSourceList.get(position).getType() == 2)drawee.addView(videoView);
417 449 mViewBox.add(drawee);
418 450 }
419 451 container.addView(drawee);
... ... @@ -461,101 +493,79 @@ public class ImagePreView extends FrameLayout implements ViewPager.OnPageChangeL
461 493 */
462 494 private void configureItem(final int position, final ImageDrawee drawee) {
463 495 drawee.setTag(position);
464   - if (mMaxScale > 0) {
465   - drawee.setMaxScale(mMaxScale);
466   - }
467   - if (mMinScale > 0) {
468   - drawee.setMinScale(mMinScale);
469   - }
470   -
471   -
472   - drawee.setImage(mSourceList.get(position).getImageSrc(),new LoadImage.LoadCallback(){
473   -
474   - @Override
475   - public void onLoadStarted(Object placeholder) {
476   -
  496 + if(mSourceList.get(position).getType() == 1){
  497 + playEnterAnim = true;
  498 + playExitAnim = true;
  499 + draggable = true;
  500 + if (mMaxScale > 0) {
  501 + drawee.setMaxScale(mMaxScale);
477 502 }
478   -
479   - @Override
480   - public void onLoading(float progress) {
481   - drawee.handleProgress(progress);
  503 + if (mMinScale > 0) {
  504 + drawee.setMinScale(mMinScale);
482 505 }
483   -
484   - @Override
485   - public void onLoadSucceed(Object source) {
486   - drawee.hideProgressUI();
487   - if (mSourceList.get(position).getImageWidth() == 0 ||
488   - mSourceList.get(position).getImageHeight() == 0) {
489   - Drawable drawable = drawee.getImageView().getDrawable();
490   - if (drawable != null) {
491   - mSourceList.get(position).setImageWidth(drawable.getIntrinsicWidth());
492   - mSourceList.get(position).setImageHeight(drawable.getIntrinsicHeight());
  506 + if(drawee.getImageView() != null){
  507 + // 单击事件
  508 + drawee.getImageView().setOnClickListener(new OnClickListener() {
  509 + @Override
  510 + public void onClick(View v) {
  511 + if (!hasAnimRunning && mItemClickListener != null) {
  512 + final boolean result = mItemClickListener.onItemClick(position, drawee.getImageView());
  513 + // 判断是否消费了单击事件,如果消费了,则单击事件的后续方法不执行
  514 + if (result) {
  515 + return;
  516 + }
  517 + }
  518 + cancel();
493 519 }
494   - }
  520 + });
  521 + // 长按事件
  522 + drawee.getImageView().setOnLongClickListener(new OnLongClickListener() {
  523 + @Override
  524 + public boolean onLongClick(View v) {
  525 + if (!hasAnimRunning && mItemLongPressListener != null) {
  526 + return mItemLongPressListener.onItemLongPress(position, drawee.getImageView());
  527 + }
  528 + return false;
  529 + }
  530 + });
495 531 }
  532 + drawee.setImage(mSourceList.get(position).getImageSrc(),new LoadImage.LoadCallback(){
496 533  
497   - @Override
498   - public void onLoadFailed() {
499   - drawee.hideProgressUI();
500   - }
501   - });
502   -
503   -
504   -// mLoader.displayImage(mSourceList.get(position).getImageSrc(), drawee.getImageView(), new LoadImage.LoadCallback() {
505   -// @Override
506   -// public void onLoadStarted(Object placeholder) {
507   -// drawee.setImage(placeholder);
508   -// }
509   -//
510   -// @Override
511   -// public void onLoading(float progress) {
512   -// drawee.handleProgress(progress);
513   -// }
514   -//
515   -// @Override
516   -// public void onLoadSucceed(Object source) {
517   -// drawee.hideProgressUI();
518   -// drawee.setImage(source);
519   -// if (mSourceList.get(position).getImageWidth() == 0 ||
520   -// mSourceList.get(position).getImageHeight() == 0) {
521   -// Drawable drawable = drawee.getImageView().getDrawable();
522   -// if (drawable != null) {
523   -// mSourceList.get(position).setImageWidth(drawable.getIntrinsicWidth());
524   -// mSourceList.get(position).setImageHeight(drawable.getIntrinsicHeight());
525   -// }
526   -// }
527   -// }
528   -//
529   -// @Override
530   -// public void onLoadFailed(Object error) {
531   -// drawee.hideProgressUI();
532   -//// drawee.setImage(error);
533   -// }
534   -// });
535   - // 单击事件
536   - drawee.getImageView().setOnClickListener(new OnClickListener() {
537   - @Override
538   - public void onClick(View v) {
539   - if (!hasAnimRunning && mItemClickListener != null) {
540   - final boolean result = mItemClickListener.onItemClick(position, drawee.getImageView());
541   - // 判断是否消费了单击事件,如果消费了,则单击事件的后续方法不执行
542   - if (result) {
543   - return;
  534 + @Override
  535 + public void onLoadStarted(Object placeholder) {
  536 +
  537 + }
  538 +
  539 + @Override
  540 + public void onLoading(float progress) {
  541 + drawee.handleProgress(progress);
  542 + }
  543 +
  544 + @Override
  545 + public void onLoadSucceed(Object source) {
  546 + drawee.hideProgressUI();
  547 + if (mSourceList.get(position).getImageWidth() == 0 ||
  548 + mSourceList.get(position).getImageHeight() == 0) {
  549 + Drawable drawable = drawee.getImageView().getDrawable();
  550 + if (drawable != null) {
  551 + mSourceList.get(position).setImageWidth(drawable.getIntrinsicWidth());
  552 + mSourceList.get(position).setImageHeight(drawable.getIntrinsicHeight());
  553 + }
544 554 }
545 555 }
546   - cancel();
547   - }
548   - });
549   - // 长按事件
550   - drawee.getImageView().setOnLongClickListener(new OnLongClickListener() {
551   - @Override
552   - public boolean onLongClick(View v) {
553   - if (!hasAnimRunning && mItemLongPressListener != null) {
554   - return mItemLongPressListener.onItemLongPress(position, drawee.getImageView());
  556 +
  557 + @Override
  558 + public void onLoadFailed() {
  559 + drawee.hideProgressUI();
555 560 }
556   - return false;
557   - }
558   - });
  561 + });
  562 + }else if(mSourceList.get(position).getType() == 2){
  563 + playEnterAnim = false;
  564 + playExitAnim = false;
  565 + draggable = false;
  566 + videoView.setUrl("http://ffyl.vods2.cnlive.com/223/vod/2018/1120/223_88c98ab1395f4762b703fbdd9d59d2e5/ff80808166c2a45201672f14a9933131_800.m3u8");
  567 + videoView.start();
  568 + }
559 569 }
560 570  
561 571 private void noteDragStatus(int status) {
... ... @@ -677,7 +687,7 @@ public class ImagePreView extends FrameLayout implements ViewPager.OnPageChangeL
677 687 * 4.拖拽处理类不为空
678 688 * 5.手势为上下滑动手势,左右滑动不触发
679 689 */
680   - if (ev.getPointerCount() == 1 && getCurrentItem().getScale() <= 1f) {
  690 + if (ev.getPointerCount() == 1 && getCurrentItem() != null && getCurrentItem().getScale() <= 1f) {
681 691 float disX = ev.getX() - mLastX;
682 692 float disY = ev.getY() - mLastY;
683 693 // 上下滑动手势
... ...
core/imageload/src/main/java/com/cnlive/core/imagepreview/ViewData.java
... ... @@ -20,6 +20,8 @@ public class ViewData {
20 20 // 目标 view 的高度
21 21 private int targetHeight;
22 22  
  23 + private int type;
  24 +
23 25 public ViewData() {
24 26  
25 27 }
... ... @@ -28,22 +30,24 @@ public class ViewData {
28 30 this.imageSrc = imageSrc;
29 31 }
30 32  
31   - public ViewData(float targetX, float targetY, int targetWidth, int targetHeight) {
  33 + public ViewData(float targetX, float targetY, int targetWidth, int targetHeight,int type) {
32 34 this.targetX = targetX;
33 35 this.targetY = targetY;
34 36 this.targetWidth = targetWidth;
35 37 this.targetHeight = targetHeight;
  38 + this.type = type;
36 39 }
37 40  
38   - public ViewData(Object imageSrc, float targetX, float targetY, int targetWidth, int targetHeight) {
  41 + public ViewData(Object imageSrc, float targetX, float targetY, int targetWidth, int targetHeight,int type) {
39 42 this.imageSrc = imageSrc;
40 43 this.targetX = targetX;
41 44 this.targetY = targetY;
42 45 this.targetWidth = targetWidth;
43 46 this.targetHeight = targetHeight;
  47 + this.type = type;
44 48 }
45 49  
46   - public ViewData(Object imageSrc, int imageWidth, int imageHeight, float targetX, float targetY, int targetWidth, int targetHeight) {
  50 + public ViewData(Object imageSrc, int imageWidth, int imageHeight, float targetX, float targetY, int targetWidth, int targetHeight,int type) {
47 51 this.imageSrc = imageSrc;
48 52 this.imageWidth = imageWidth;
49 53 this.imageHeight = imageHeight;
... ... @@ -51,6 +55,7 @@ public class ViewData {
51 55 this.targetY = targetY;
52 56 this.targetWidth = targetWidth;
53 57 this.targetHeight = targetHeight;
  58 + this.type = type;
54 59 }
55 60  
56 61 public Object getImageSrc() {
... ... @@ -108,4 +113,12 @@ public class ViewData {
108 113 public void setTargetHeight(int targetHeight) {
109 114 this.targetHeight = targetHeight;
110 115 }
  116 +
  117 + public int getType() {
  118 + return type;
  119 + }
  120 +
  121 + public void setType(int type) {
  122 + this.type = type;
  123 + }
111 124 }
... ...