Commit ba03f766fac699c50fb929c45230af8bce046fa5
1 parent
7eb626e7
处理加载慢问题
Showing
6 changed files
with
139 additions
and
163 deletions
app/src/main/java/com/cnlive/strike/debug/MainActivity.java
| @@ -71,7 +71,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe | @@ -71,7 +71,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe | ||
| 71 | .maxImageSize(25 * 1024 * 1024) | 71 | .maxImageSize(25 * 1024 * 1024) |
| 72 | .maxVideoSize(100*1024*1024) | 72 | .maxVideoSize(100*1024*1024) |
| 73 | .isReturnUri(AndroidQUtil.isAndroidQ()) | 73 | .isReturnUri(AndroidQUtil.isAndroidQ()) |
| 74 | - .selectMode(PickerConfig.PICKER_VIDEO) | 74 | + .selectMode(PickerConfig.PICKER_IMAGE_VIDEO) |
| 75 | .defaultSelectList(new ArrayList<Media>()) | 75 | .defaultSelectList(new ArrayList<Media>()) |
| 76 | .needCamera(true) | 76 | .needCamera(true) |
| 77 | .builder() | 77 | .builder() |
lib_media/src/main/java/com/cnlive/media/frame/view/MediaPickerFragmentView.java
| @@ -60,18 +60,18 @@ public class MediaPickerFragmentView implements MvpView { | @@ -60,18 +60,18 @@ public class MediaPickerFragmentView implements MvpView { | ||
| 60 | //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能 | 60 | //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能 |
| 61 | mFragment.binding.rv.setHasFixedSize(true); | 61 | mFragment.binding.rv.setHasFixedSize(true); |
| 62 | 62 | ||
| 63 | - mFragment.binding.rv.addOnScrollListener(new RecyclerView.OnScrollListener() { | ||
| 64 | - @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1) | ||
| 65 | - @Override | ||
| 66 | - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { | ||
| 67 | - super.onScrollStateChanged(recyclerView, newState); | ||
| 68 | - if (RecyclerView.SCROLL_STATE_IDLE == newState) { | ||
| 69 | - Glide.with(recyclerView).resumeRequests(); | ||
| 70 | - } else { | ||
| 71 | - Glide.with(recyclerView).pauseRequests(); | ||
| 72 | - } | ||
| 73 | - } | ||
| 74 | - }); | 63 | +// mFragment.binding.rv.addOnScrollListener(new RecyclerView.OnScrollListener() { |
| 64 | +// @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1) | ||
| 65 | +// @Override | ||
| 66 | +// public void onScrollStateChanged(RecyclerView recyclerView, int newState) { | ||
| 67 | +// super.onScrollStateChanged(recyclerView, newState); | ||
| 68 | +// if (RecyclerView.SCROLL_STATE_IDLE == newState) { | ||
| 69 | +// Glide.with(recyclerView).resumeRequests(); | ||
| 70 | +// } else { | ||
| 71 | +// Glide.with(recyclerView).pauseRequests(); | ||
| 72 | +// } | ||
| 73 | +// } | ||
| 74 | +// }); | ||
| 75 | mFragment.mMediaAdapter = new MediaAdapter(mFragment.getActivity(), mActivity.showTime, mActivity.mOptions); | 75 | mFragment.mMediaAdapter = new MediaAdapter(mFragment.getActivity(), mActivity.showTime, mActivity.mOptions); |
| 76 | mFragment.binding.rv.setAdapter(mFragment.mMediaAdapter); | 76 | mFragment.binding.rv.setAdapter(mFragment.mMediaAdapter); |
| 77 | 77 |
lib_media/src/main/java/com/cnlive/media/utils/GlideCacheUtil.java
| @@ -31,8 +31,8 @@ import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory; | @@ -31,8 +31,8 @@ import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory; | ||
| 31 | import com.bumptech.glide.request.RequestListener; | 31 | import com.bumptech.glide.request.RequestListener; |
| 32 | import com.bumptech.glide.request.RequestOptions; | 32 | import com.bumptech.glide.request.RequestOptions; |
| 33 | import com.bumptech.glide.request.target.Target; | 33 | import com.bumptech.glide.request.target.Target; |
| 34 | -import com.cnlive.media.media.entity.Media; | ||
| 35 | import com.cnlive.media.R; | 34 | import com.cnlive.media.R; |
| 35 | +import com.cnlive.media.media.entity.Media; | ||
| 36 | 36 | ||
| 37 | import org.reactivestreams.Subscriber; | 37 | import org.reactivestreams.Subscriber; |
| 38 | import org.reactivestreams.Subscription; | 38 | import org.reactivestreams.Subscription; |
| @@ -291,15 +291,11 @@ public class GlideCacheUtil { | @@ -291,15 +291,11 @@ public class GlideCacheUtil { | ||
| 291 | .centerCrop() | 291 | .centerCrop() |
| 292 | .dontAnimate(); | 292 | .dontAnimate(); |
| 293 | } | 293 | } |
| 294 | - | ||
| 295 | if (media.mediaType == 1) { | 294 | if (media.mediaType == 1) { |
| 296 | - option = option | ||
| 297 | - .error(R.drawable.iv_imgload_full_err); | 295 | + option = option.error(R.drawable.iv_imgload_full_err); |
| 298 | view.setScaleType(ImageView.ScaleType.CENTER_CROP); | 296 | view.setScaleType(ImageView.ScaleType.CENTER_CROP); |
| 299 | } else if (media.mediaType == 3) { | 297 | } else if (media.mediaType == 3) { |
| 300 | - option = option | ||
| 301 | - .error(R.drawable.iv_imgload_full_err); | ||
| 302 | - | 298 | + option = option.error(R.drawable.iv_imgload_full_err); |
| 303 | } | 299 | } |
| 304 | 300 | ||
| 305 | if (AndroidQUtil.isAndroidQ()) { | 301 | if (AndroidQUtil.isAndroidQ()) { |
| @@ -307,7 +303,6 @@ public class GlideCacheUtil { | @@ -307,7 +303,6 @@ public class GlideCacheUtil { | ||
| 307 | } else { | 303 | } else { |
| 308 | rb = rb == null ? rm.load(media.path) : rb.load(media.path); | 304 | rb = rb == null ? rm.load(media.path) : rb.load(media.path); |
| 309 | } | 305 | } |
| 310 | - | ||
| 311 | rb.listener(listener).apply(option).into(view); | 306 | rb.listener(listener).apply(option).into(view); |
| 312 | } catch (Exception e) { | 307 | } catch (Exception e) { |
| 313 | } | 308 | } |
| @@ -328,28 +323,24 @@ public class GlideCacheUtil { | @@ -328,28 +323,24 @@ public class GlideCacheUtil { | ||
| 328 | .dontAnimate(); | 323 | .dontAnimate(); |
| 329 | } | 324 | } |
| 330 | if (media.mediaType == 1) { | 325 | if (media.mediaType == 1) { |
| 331 | - option = option.error(R.drawable.iv_imgload_full_err); | ||
| 332 | - }else { | ||
| 333 | - option = option.error(R.drawable.iv_imgload_full_err).placeholder(R.drawable.iv_imgload_full_err); | 326 | + option = option.error(R.drawable.iv_imgload_full_err).placeholder(R.drawable.iv_new_media_zw); |
| 327 | + } else { | ||
| 328 | + option = option.error(R.drawable.iv_imgload_full_err).placeholder(R.drawable.iv_new_media_zw); | ||
| 334 | } | 329 | } |
| 335 | - | ||
| 336 | if (AndroidQUtil.isAndroidQ()) { | 330 | if (AndroidQUtil.isAndroidQ()) { |
| 331 | + view.setTag(mediaUri.toString()); | ||
| 337 | showAndroidQ(context, media.mediaType, mediaUri, view, loading, option); | 332 | showAndroidQ(context, media.mediaType, mediaUri, view, loading, option); |
| 338 | } else { | 333 | } else { |
| 339 | if (media.mediaType == 1) { | 334 | if (media.mediaType == 1) { |
| 340 | - showNoAndroidQ(context, media.mediaType, media.path, view, loading, option); | ||
| 341 | -// showImageThumbnail(context, media.mediaType, media.id, media.path, view, loading, option); | 335 | + showNoAndroidQ(context, media.mediaType, media.fileUri, view, loading, option); |
| 342 | } else if (media.mediaType == 3) { | 336 | } else if (media.mediaType == 3) { |
| 343 | if (ThumbnailsUtils.thumbnails.containsKey(media.id + "")) { | 337 | if (ThumbnailsUtils.thumbnails.containsKey(media.id + "")) { |
| 344 | - Log.e("包含:",ThumbnailsUtils.thumbnails.get(media.id + "")); | ||
| 345 | showVideoNoAndroidQ(context, media.mediaType, ThumbnailsUtils.thumbnails.get(media.id + ""), view, loading, option); | 338 | showVideoNoAndroidQ(context, media.mediaType, ThumbnailsUtils.thumbnails.get(media.id + ""), view, loading, option); |
| 346 | } else { | 339 | } else { |
| 340 | + view.setTag(media.id); | ||
| 347 | showVideoThumbnail(context, media.mediaType, media.id, media.path, view, loading, option); | 341 | showVideoThumbnail(context, media.mediaType, media.id, media.path, view, loading, option); |
| 348 | -// showVideoNoAndroidQ(context, media.mediaType, media.path, view, loading, option); | ||
| 349 | } | 342 | } |
| 350 | -// | ||
| 351 | } | 343 | } |
| 352 | - | ||
| 353 | } | 344 | } |
| 354 | 345 | ||
| 355 | 346 | ||
| @@ -358,50 +349,57 @@ public class GlideCacheUtil { | @@ -358,50 +349,57 @@ public class GlideCacheUtil { | ||
| 358 | } | 349 | } |
| 359 | } | 350 | } |
| 360 | 351 | ||
| 352 | + private static void showAndroidQUri(Context context, Uri path, ImageView view, ProgressBar loading, RequestOptions option) { | ||
| 353 | + RequestBuilder rb = Glide.with(context).load(path); | ||
| 354 | + rb.listener(new RequestListener() { | ||
| 355 | + @Override | ||
| 356 | + public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { | ||
| 357 | + view.setScaleType(ImageView.ScaleType.CENTER); | ||
| 358 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 359 | + return false; | ||
| 360 | + } | ||
| 361 | + | ||
| 362 | + @Override | ||
| 363 | + public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { | ||
| 364 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 365 | + return false; | ||
| 366 | + } | ||
| 367 | + }); | ||
| 368 | + | ||
| 369 | + rb.apply(option).into(view); | ||
| 370 | + } | ||
| 371 | + | ||
| 361 | private static void showAndroidQ(Context context, int mediaType, Uri mediaUri, ImageView view, ProgressBar loading, RequestOptions option) { | 372 | private static void showAndroidQ(Context context, int mediaType, Uri mediaUri, ImageView view, ProgressBar loading, RequestOptions option) { |
| 373 | + | ||
| 362 | Observable.create(new ObservableOnSubscribe<Bitmap>() { | 374 | Observable.create(new ObservableOnSubscribe<Bitmap>() { |
| 363 | @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) | 375 | @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) |
| 364 | @Override | 376 | @Override |
| 365 | public void subscribe(ObservableEmitter<Bitmap> emitter) throws Exception { | 377 | public void subscribe(ObservableEmitter<Bitmap> emitter) throws Exception { |
| 366 | ContentResolver contentResolver = context.getContentResolver(); | 378 | ContentResolver contentResolver = context.getContentResolver(); |
| 367 | Bitmap bm = contentResolver.loadThumbnail(mediaUri, new Size(100, 100), null); | 379 | Bitmap bm = contentResolver.loadThumbnail(mediaUri, new Size(100, 100), null); |
| 368 | - if (bm!=null){ | 380 | + if (bm != null) { |
| 369 | emitter.onNext(bm); | 381 | emitter.onNext(bm); |
| 370 | - }else { | 382 | + } else { |
| 371 | emitter.onError(new Throwable("")); | 383 | emitter.onError(new Throwable("")); |
| 372 | } | 384 | } |
| 373 | - | ||
| 374 | } | 385 | } |
| 375 | }).subscribeOn(Schedulers.computation()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Bitmap>() { | 386 | }).subscribeOn(Schedulers.computation()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Bitmap>() { |
| 376 | @Override | 387 | @Override |
| 377 | public void onSubscribe(Disposable d) { | 388 | public void onSubscribe(Disposable d) { |
| 378 | - | ||
| 379 | } | 389 | } |
| 380 | 390 | ||
| 381 | @Override | 391 | @Override |
| 382 | - public void onNext(Bitmap bm) { | ||
| 383 | - | ||
| 384 | - RequestBuilder rb = Glide.with(context).load(bm); | ||
| 385 | - rb.listener(new RequestListener() { | ||
| 386 | - @Override | ||
| 387 | - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { | ||
| 388 | - view.setScaleType(ImageView.ScaleType.CENTER); | ||
| 389 | - if (loading != null) loading.setVisibility(View.GONE); | ||
| 390 | - return false; | ||
| 391 | - } | ||
| 392 | - | ||
| 393 | - @Override | ||
| 394 | - public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { | ||
| 395 | - if (loading != null) loading.setVisibility(View.GONE); | ||
| 396 | - return false; | ||
| 397 | - } | ||
| 398 | - }); | ||
| 399 | - | ||
| 400 | - rb.apply(option).into(view); | 392 | + public void onNext(Bitmap bean) { |
| 393 | + if (view.getTag() != null && mediaUri.toString().equals(view.getTag())) { | ||
| 394 | + showThumbnail(context, bean, view, loading, option); | ||
| 395 | + } | ||
| 401 | } | 396 | } |
| 402 | 397 | ||
| 403 | @Override | 398 | @Override |
| 404 | public void onError(Throwable e) { | 399 | public void onError(Throwable e) { |
| 400 | + if (view.getTag() != null && mediaUri.toString().equals(view.getTag())) { | ||
| 401 | + showAndroidQUri(context, mediaUri, view, loading, option); | ||
| 402 | + } | ||
| 405 | if (loading != null) loading.setVisibility(View.GONE); | 403 | if (loading != null) loading.setVisibility(View.GONE); |
| 406 | } | 404 | } |
| 407 | 405 | ||
| @@ -452,11 +450,8 @@ public class GlideCacheUtil { | @@ -452,11 +450,8 @@ public class GlideCacheUtil { | ||
| 452 | rb.thumbnail(0.3f).apply(option).into(view); | 450 | rb.thumbnail(0.3f).apply(option).into(view); |
| 453 | } | 451 | } |
| 454 | 452 | ||
| 455 | - public static int count = 0; | ||
| 456 | 453 | ||
| 457 | private static void showVideoThumbnail(Context context, int mediaType, long id, String path, ImageView view, ProgressBar loading, RequestOptions option) { | 454 | private static void showVideoThumbnail(Context context, int mediaType, long id, String path, ImageView view, ProgressBar loading, RequestOptions option) { |
| 458 | -// Bitmap bm = getVideoThumbnail(context, id + ""); | ||
| 459 | -// showThumbnail(context, bm, view, loading, option); | ||
| 460 | // // 步骤1:创建被观察者 = Flowable | 455 | // // 步骤1:创建被观察者 = Flowable |
| 461 | Flowable.create(new FlowableOnSubscribe<Bitmap>() { | 456 | Flowable.create(new FlowableOnSubscribe<Bitmap>() { |
| 462 | @Override | 457 | @Override |
| @@ -467,21 +462,17 @@ public class GlideCacheUtil { | @@ -467,21 +462,17 @@ public class GlideCacheUtil { | ||
| 467 | } else { | 462 | } else { |
| 468 | emitter.onError(new Throwable("")); | 463 | emitter.onError(new Throwable("")); |
| 469 | } | 464 | } |
| 470 | - | ||
| 471 | -// emitter.onComplete(); | ||
| 472 | } | 465 | } |
| 473 | }, BackpressureStrategy.LATEST) | 466 | }, BackpressureStrategy.LATEST) |
| 474 | .subscribe(new Subscriber<Bitmap>() { | 467 | .subscribe(new Subscriber<Bitmap>() { |
| 475 | - // 步骤2:创建观察者 = Subscriber & 建立订阅关系 | ||
| 476 | - | ||
| 477 | @Override | 468 | @Override |
| 478 | public void onSubscribe(Subscription s) { | 469 | public void onSubscribe(Subscription s) { |
| 479 | -// s.request(150); | ||
| 480 | } | 470 | } |
| 481 | 471 | ||
| 482 | @Override | 472 | @Override |
| 483 | public void onNext(Bitmap thumbnails) { | 473 | public void onNext(Bitmap thumbnails) { |
| 484 | - showThumbnail(context, thumbnails, view, loading, option); | 474 | + if (view.getTag() != null && view.getTag().toString().equals(id + "")) |
| 475 | + showThumbnail(context, thumbnails, view, loading, option); | ||
| 485 | } | 476 | } |
| 486 | 477 | ||
| 487 | @Override | 478 | @Override |
| @@ -494,100 +485,9 @@ public class GlideCacheUtil { | @@ -494,100 +485,9 @@ public class GlideCacheUtil { | ||
| 494 | public void onComplete() { | 485 | public void onComplete() { |
| 495 | } | 486 | } |
| 496 | }); | 487 | }); |
| 497 | - | ||
| 498 | - | ||
| 499 | - Observable.create(new ObservableOnSubscribe<Bitmap>() { | ||
| 500 | - @Override | ||
| 501 | - public void subscribe(ObservableEmitter<Bitmap> emitter) throws Exception { | ||
| 502 | - count += 1; | ||
| 503 | - Log.e("显示测试:", count + ""); | ||
| 504 | - Bitmap bitmap = getVideoThumbnail(context, id + ""); | ||
| 505 | - emitter.onNext(bitmap); | ||
| 506 | -// | ||
| 507 | -// Cursor thumbCursor = null; | ||
| 508 | -// Bitmap bitmap = null; | ||
| 509 | -// thumbCursor = context.getContentResolver().query( | ||
| 510 | -// MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, | ||
| 511 | -// null, MediaStore.Video.Thumbnails.VIDEO_ID | ||
| 512 | -// + "=" + id, null, null); | ||
| 513 | -// if (thumbCursor.moveToFirst()) { | ||
| 514 | -// String albumPath = thumbCursor.getString(thumbCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA)); | ||
| 515 | -// Log.e("显示测试地址:", albumPath); | ||
| 516 | -// bitmap = BitmapFactory.decodeFile(albumPath); | ||
| 517 | -// emitter.onNext(bitmap); | ||
| 518 | -// }else { | ||
| 519 | -// emitter.onNext(Bitmap.createBitmap(1,1,Bitmap.Config.RGB_565)); | ||
| 520 | -// } | ||
| 521 | - | ||
| 522 | - | ||
| 523 | - } | ||
| 524 | - }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Bitmap>() { | ||
| 525 | - @Override | ||
| 526 | - public void onSubscribe(Disposable d) { | ||
| 527 | - Log.e("显示测试:--->", "onSubscribe:" + count + ""); | ||
| 528 | - } | ||
| 529 | - | ||
| 530 | - @Override | ||
| 531 | - public void onNext(Bitmap thumbnails) { | ||
| 532 | - Log.e("显示测试:--->", "onNext:" + count + ""); | ||
| 533 | - showThumbnail(context, thumbnails, view, loading, option); | ||
| 534 | - | ||
| 535 | - } | ||
| 536 | - | ||
| 537 | - @Override | ||
| 538 | - public void onError(Throwable e) { | ||
| 539 | - showNoAndroidQ(context, mediaType, path, view, loading, option); | ||
| 540 | - if (loading != null) loading.setVisibility(View.GONE); | ||
| 541 | - } | ||
| 542 | - | ||
| 543 | - @Override | ||
| 544 | - public void onComplete() { | ||
| 545 | - Log.e("显示测试:--->", "onComplete:" + count + ""); | ||
| 546 | - } | ||
| 547 | - }); | ||
| 548 | } | 488 | } |
| 549 | 489 | ||
| 550 | 490 | ||
| 551 | - private static void showImageThumbnail(Context context, int mediaType, int id, String path, ImageView view, ProgressBar loading, RequestOptions option) { | ||
| 552 | - Observable.create(new ObservableOnSubscribe<Bitmap>() { | ||
| 553 | - @Override | ||
| 554 | - public void subscribe(ObservableEmitter<Bitmap> emitter) throws Exception { | ||
| 555 | - Bitmap bm = null; | ||
| 556 | - if (mediaType == 1) { | ||
| 557 | - bm = getImageThumbnail(context, id + ""); | ||
| 558 | - emitter.onNext(bm); | ||
| 559 | - } | ||
| 560 | - | ||
| 561 | - | ||
| 562 | - } | ||
| 563 | - }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Bitmap>() { | ||
| 564 | - @Override | ||
| 565 | - public void onSubscribe(Disposable d) { | ||
| 566 | - | ||
| 567 | - } | ||
| 568 | - | ||
| 569 | - @Override | ||
| 570 | - public void onNext(Bitmap thumbnails) { | ||
| 571 | - if (thumbnails != null) { | ||
| 572 | - showThumbnail(context, thumbnails, view, loading, option); | ||
| 573 | - } else { | ||
| 574 | - showNoAndroidQ(context, mediaType, path, view, loading, option); | ||
| 575 | - } | ||
| 576 | - | ||
| 577 | - } | ||
| 578 | - | ||
| 579 | - @Override | ||
| 580 | - public void onError(Throwable e) { | ||
| 581 | - if (loading != null) loading.setVisibility(View.GONE); | ||
| 582 | - } | ||
| 583 | - | ||
| 584 | - @Override | ||
| 585 | - public void onComplete() { | ||
| 586 | - | ||
| 587 | - } | ||
| 588 | - }); | ||
| 589 | - } | ||
| 590 | - | ||
| 591 | private static void showThumbnail(Context context, Bitmap bm, ImageView view, ProgressBar loading, RequestOptions option) { | 491 | private static void showThumbnail(Context context, Bitmap bm, ImageView view, ProgressBar loading, RequestOptions option) { |
| 592 | RequestBuilder rb = Glide.with(context).load(bm); | 492 | RequestBuilder rb = Glide.with(context).load(bm); |
| 593 | rb.listener(new RequestListener() { | 493 | rb.listener(new RequestListener() { |
| @@ -619,7 +519,7 @@ public class GlideCacheUtil { | @@ -619,7 +519,7 @@ public class GlideCacheUtil { | ||
| 619 | + "=" + videoId, null, null); | 519 | + "=" + videoId, null, null); |
| 620 | if (thumbCursor.moveToFirst()) { | 520 | if (thumbCursor.moveToFirst()) { |
| 621 | String albumPath = thumbCursor.getString(thumbCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA)); | 521 | String albumPath = thumbCursor.getString(thumbCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA)); |
| 622 | - Log.d("缩略图----------------->:","id:"+videoId+"地址:"+ albumPath); | 522 | + Log.d("缩略图----------------->:", "id:" + videoId + "地址:" + albumPath); |
| 623 | bitmap = BitmapFactory.decodeFile(albumPath); | 523 | bitmap = BitmapFactory.decodeFile(albumPath); |
| 624 | return bitmap; | 524 | return bitmap; |
| 625 | } | 525 | } |
| @@ -635,14 +535,6 @@ public class GlideCacheUtil { | @@ -635,14 +535,6 @@ public class GlideCacheUtil { | ||
| 635 | public static Bitmap getImageThumbnail(Context context, String videoId) { | 535 | public static Bitmap getImageThumbnail(Context context, String videoId) { |
| 636 | Bitmap bitmap = null; | 536 | Bitmap bitmap = null; |
| 637 | Cursor thumbCursor = null; | 537 | Cursor thumbCursor = null; |
| 638 | - | ||
| 639 | - | ||
| 640 | -// String[] projection = {MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.IMAGE_ID, | ||
| 641 | -// MediaStore.Images.Thumbnails.DATA}; | ||
| 642 | -// | ||
| 643 | -// Cursor cursor = context.getContentResolver().query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, null, null, null); | ||
| 644 | -// | ||
| 645 | - | ||
| 646 | try { | 538 | try { |
| 647 | thumbCursor = context.getApplicationContext().getContentResolver().query( | 539 | thumbCursor = context.getApplicationContext().getContentResolver().query( |
| 648 | MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, | 540 | MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, |
lib_media/src/main/java/com/cnlive/media/utils/ThumbnailsUtils.java
| @@ -36,10 +36,31 @@ public class ThumbnailsUtils { | @@ -36,10 +36,31 @@ public class ThumbnailsUtils { | ||
| 36 | _id = cursor.getInt(_idColumn); | 36 | _id = cursor.getInt(_idColumn); |
| 37 | image_id = cursor.getInt(image_idColumn); | 37 | image_id = cursor.getInt(image_idColumn); |
| 38 | image_path = cursor.getString(dataColumn); | 38 | image_path = cursor.getString(dataColumn); |
| 39 | + Log.e("缩略图视频:","--->videoId:"+image_id+" videoPath:"+image_path); | ||
| 39 | thumbnails.put(image_id + "", image_path); | 40 | thumbnails.put(image_id + "", image_path); |
| 40 | } | 41 | } |
| 42 | + getImageThumbnails(context); | ||
| 43 | + } | ||
| 41 | 44 | ||
| 45 | + public static void getImageThumbnails(Context context) { | ||
| 46 | + String[] projection = {MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.IMAGE_ID, | ||
| 47 | + MediaStore.Images.Thumbnails.DATA}; | ||
| 42 | 48 | ||
| 49 | + Cursor cursor = context.getContentResolver().query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, null, null, null); | ||
| 50 | + if (cursor == null) return; | ||
| 51 | + while (cursor.moveToNext()) { | ||
| 52 | + int _id; | ||
| 53 | + int image_id; | ||
| 54 | + String image_path; | ||
| 55 | + int _idColumn = cursor.getColumnIndex(MediaStore.Images.Thumbnails._ID); | ||
| 56 | + int image_idColumn = cursor.getColumnIndex(MediaStore.Images.Thumbnails.IMAGE_ID); | ||
| 57 | + int dataColumn = cursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA); | ||
| 58 | + _id = cursor.getInt(_idColumn); | ||
| 59 | + image_id = cursor.getInt(image_idColumn); | ||
| 60 | + image_path = cursor.getString(dataColumn); | ||
| 61 | + Log.e("缩略图图片:","--->image_id:"+image_id+" image_path:"+image_path); | ||
| 62 | + thumbnails.put(image_id + "", image_path); | ||
| 63 | + } | ||
| 43 | } | 64 | } |
| 44 | 65 | ||
| 45 | 66 |
lib_media/src/main/java/com/cnlive/media/utils/glide/DataCacheKey.java
0 → 100644
| 1 | +package com.cnlive.media.utils.glide; | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * 作 者 : wkq | ||
| 5 | + * <p> | ||
| 6 | + * 时 间 : 2021/2/1 11:05 | ||
| 7 | + * <p> | ||
| 8 | + * 名 字 : DataCacheKey | ||
| 9 | + * <p> | ||
| 10 | + * 简 介 : | ||
| 11 | + */ | ||
| 12 | + | ||
| 13 | +import com.bumptech.glide.load.Key; | ||
| 14 | + | ||
| 15 | +import java.security.MessageDigest; | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * A cache key for original source data + any requested signature. | ||
| 19 | + */ | ||
| 20 | +public class DataCacheKey implements Key { | ||
| 21 | + | ||
| 22 | + private final Key sourceKey; | ||
| 23 | + private final Key signature; | ||
| 24 | + | ||
| 25 | + public DataCacheKey(Key sourceKey, Key signature) { | ||
| 26 | + this.sourceKey = sourceKey; | ||
| 27 | + this.signature = signature; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + public Key getSourceKey() { | ||
| 31 | + return sourceKey; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + @Override | ||
| 35 | + public boolean equals(Object o) { | ||
| 36 | + if (o instanceof DataCacheKey) { | ||
| 37 | + DataCacheKey other = (DataCacheKey) o; | ||
| 38 | + return sourceKey.equals(other.sourceKey) && signature.equals(other.signature); | ||
| 39 | + } | ||
| 40 | + return false; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + @Override | ||
| 44 | + public int hashCode() { | ||
| 45 | + int result = sourceKey.hashCode(); | ||
| 46 | + result = 31 * result + signature.hashCode(); | ||
| 47 | + return result; | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + @Override | ||
| 51 | + public String toString() { | ||
| 52 | + return "DataCacheKey{" | ||
| 53 | + + "sourceKey=" + sourceKey | ||
| 54 | + + ", signature=" + signature | ||
| 55 | + + '}'; | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + @Override | ||
| 59 | + public void updateDiskCacheKey(MessageDigest messageDigest) { | ||
| 60 | + sourceKey.updateDiskCacheKey(messageDigest); | ||
| 61 | + signature.updateDiskCacheKey(messageDigest); | ||
| 62 | + } | ||
| 63 | +} |
lib_media/src/main/res/drawable-xhdpi/iv_new_media_zw.png
0 → 100644
5.23 KB