diff --git a/app/src/main/java/com/gh/common/util/ImageUtils.kt b/app/src/main/java/com/gh/common/util/ImageUtils.kt index 0e0282878f..57735cd987 100644 --- a/app/src/main/java/com/gh/common/util/ImageUtils.kt +++ b/app/src/main/java/com/gh/common/util/ImageUtils.kt @@ -9,21 +9,18 @@ import android.net.Uri import android.os.Build import androidx.annotation.DrawableRes import androidx.core.content.ContextCompat -import com.facebook.common.executors.CallerThreadExecutor import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.controller.BaseControllerListener import com.facebook.drawee.controller.ControllerListener import com.facebook.drawee.drawable.ScalingUtils import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder import com.facebook.drawee.view.SimpleDraweeView -import com.facebook.imagepipeline.core.ImagePipeline -import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber import com.facebook.imagepipeline.image.ImageInfo import com.facebook.imagepipeline.request.ImageRequest -import com.facebook.imagepipeline.request.ImageRequestBuilder import com.gh.common.constant.Config import com.gh.gamecenter.R import com.halo.assistant.HaloApp +import com.squareup.picasso.Picasso import java.io.ByteArrayOutputStream @@ -216,17 +213,13 @@ object ImageUtils { .build() } - // 获取bitmap + // 获取bitmap (使用 fresco 获取 gif bitmap 会为空,https://github.com/facebook/fresco/issues/241) + // 所以这里换用 picasso @JvmStatic - fun display(context: Context?, url: String?, dataSubscriber: BaseBitmapDataSubscriber) { - val imageRequest = ImageRequestBuilder - .newBuilderWithSource(Uri.parse(url)) - .setProgressiveRenderingEnabled(true) - .build() - - Fresco.getImagePipeline() - .fetchDecodedImage(imageRequest, context) - .subscribe(dataSubscriber, CallerThreadExecutor.getInstance()) + fun getBitmap(url: String, target: com.squareup.picasso.Target) { + Picasso.with(HaloApp.getInstance().application) + .load(url) + .into(target) } /** @@ -327,7 +320,7 @@ object ImageUtils { //预加载图片 @JvmStatic - fun prefetchToDiskCache(url: String){ + fun prefetchToDiskCache(url: String) { val imagePipeline = Fresco.getImagePipeline() val imageRequest = ImageRequest.fromUri(url) imagePipeline.prefetchToDiskCache(imageRequest, HaloApp.getInstance().application) diff --git a/app/src/main/java/com/gh/common/util/ShareUtils.java b/app/src/main/java/com/gh/common/util/ShareUtils.java index 66483ba2cd..82d9234936 100644 --- a/app/src/main/java/com/gh/common/util/ShareUtils.java +++ b/app/src/main/java/com/gh/common/util/ShareUtils.java @@ -10,6 +10,7 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; +import android.graphics.drawable.Drawable; import android.media.ThumbnailUtils; import android.os.Bundle; import android.text.TextUtils; @@ -24,10 +25,9 @@ import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; -import com.facebook.common.references.CloseableReference; -import com.facebook.datasource.DataSource; -import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber; -import com.facebook.imagepipeline.image.CloseableImage; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.gh.common.constant.Config; import com.gh.gamecenter.R; import com.gh.gamecenter.WeiBoShareActivity; @@ -36,6 +36,8 @@ import com.gh.gamecenter.eventbus.EBShare; import com.lightgame.utils.Utils; import com.sina.weibo.sdk.WbSdk; import com.sina.weibo.sdk.auth.AuthInfo; +import com.squareup.picasso.Picasso; +import com.squareup.picasso.Target; import com.tencent.connect.share.QQShare; import com.tencent.connect.share.QzoneShare; import com.tencent.mm.opensdk.modelmsg.SendMessageToWX; @@ -54,9 +56,6 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - import static com.gh.common.util.LoginHelper.WEIBO_SCOPE; /** @@ -336,7 +335,7 @@ public class ShareUtils { req.message = msg; req.scene = SendMessageToWX.Req.WXSceneSession; - loadBitMap(shareIcon, msg, req); + loadBitmapAndShare(shareIcon, msg, req); if (mShareEntrance != ShareEntrance.shareGh) { popupWindow.get().dismiss(); } @@ -346,10 +345,10 @@ public class ShareUtils { return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); } - private void loadBitMap(final String iconUrl, final WXMediaMessage msg, final SendMessageToWX.Req req) { - ImageUtils.display(mContext, iconUrl, new BaseBitmapDataSubscriber() { + private void loadBitmapAndShare(final String iconUrl, final WXMediaMessage msg, final SendMessageToWX.Req req) { + ImageUtils.getBitmap(iconUrl, new Target() { @Override - protected void onNewResultImpl(Bitmap bitmap) { + public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { if (mShareEntrance == ShareEntrance.video) { // 分享类型为视频时裁为正方形 int dimension = Math.min(bitmap.getWidth(), bitmap.getHeight()); @@ -367,9 +366,12 @@ public class ShareUtils { } @Override - protected void onFailureImpl(DataSource> dataSource) { + public void onBitmapFailed(Drawable errorDrawable) { Utils.log("分享获取bitmap失败"); } + + @Override + public void onPrepareLoad(Drawable placeHolderDrawable) {} }); } @@ -497,7 +499,7 @@ public class ShareUtils { req.message = msg; req.scene = SendMessageToWX.Req.WXSceneTimeline; - loadBitMap(shareIcon, msg, req); + loadBitmapAndShare(shareIcon, msg, req); if (mShareEntrance != ShareEntrance.shareGh) { popupWindow.get().dismiss(); } diff --git a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java index 1ec93fceb5..0d3a3217e0 100644 --- a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java +++ b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java @@ -4,13 +4,12 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; import android.media.ThumbnailUtils; import android.os.Bundle; -import com.facebook.common.references.CloseableReference; -import com.facebook.datasource.DataSource; -import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber; -import com.facebook.imagepipeline.image.CloseableImage; +import androidx.annotation.NonNull; + import com.gh.common.util.ImageUtils; import com.gh.common.util.LogUtils; import com.gh.common.util.ShareUtils; @@ -23,11 +22,11 @@ import com.sina.weibo.sdk.api.WeiboMultiMessage; import com.sina.weibo.sdk.share.WbShareCallback; import com.sina.weibo.sdk.share.WbShareHandler; import com.sina.weibo.sdk.utils.Utility; +import com.squareup.picasso.Picasso; +import com.squareup.picasso.Target; import org.greenrobot.eventbus.EventBus; -import androidx.annotation.NonNull; - /** * Created by khy on 2016/11/23. *

@@ -90,9 +89,9 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback { } private void weiboLoadBitMap(String iconUrl) { - ImageUtils.display(this, iconUrl, new BaseBitmapDataSubscriber() { + ImageUtils.getBitmap(iconUrl, new Target() { @Override - protected void onNewResultImpl(Bitmap bitmap) { + public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { Utils.log("分享获取bitmap成功,准备分享"); if (ShareUtils.ShareEntrance.video.name().equals(mShareType)) { @@ -144,9 +143,14 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback { } @Override - protected void onFailureImpl(DataSource> dataSource) { + public void onBitmapFailed(Drawable errorDrawable) { Utils.log("分享获取bitmap失败"); } + + @Override + public void onPrepareLoad(Drawable placeHolderDrawable) { + + } }); } diff --git a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java index 2f5d981082..d3acd366f9 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java @@ -3,6 +3,7 @@ package com.gh.gamecenter.fragment; import android.graphics.Bitmap; import android.graphics.PorterDuff; import android.graphics.drawable.Animatable; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; @@ -11,17 +12,19 @@ import android.widget.CheckedTextView; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.ColorRes; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProviders; + import com.airbnb.lottie.LottieAnimationView; -import com.facebook.common.references.CloseableReference; -import com.facebook.datasource.DataSource; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.controller.BaseControllerListener; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.fresco.animation.drawable.AnimatedDrawable2; import com.facebook.fresco.animation.drawable.BaseAnimationListener; -import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber; -import com.facebook.imagepipeline.image.CloseableImage; import com.facebook.imagepipeline.image.ImageInfo; import com.gh.base.OnDoubleTapListener; import com.gh.base.fragment.BaseFragment_ViewPager_Checkable; @@ -54,6 +57,7 @@ import com.lightgame.view.CheckableImageView; import com.lightgame.view.CheckableLinearLayout; import com.lightgame.view.NoScrollableViewPager; import com.squareup.picasso.Picasso; +import com.squareup.picasso.Target; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -61,11 +65,6 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.List; -import androidx.annotation.ColorRes; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.fragment.app.Fragment; -import androidx.lifecycle.ViewModelProviders; import butterknife.BindView; import static com.gh.gamecenter.MainActivity.EB_SKIP_MAIN; @@ -195,9 +194,9 @@ public class MainWrapperFragment extends BaseFragment_ViewPager_Checkable implem mViewModel.requestOpeningData(); mViewModel.getOpeningDialog().observe(this, it -> { if (it != null) { - ImageUtils.display(requireContext(), it.getIcon(), new BaseBitmapDataSubscriber() { + ImageUtils.getBitmap(it.getIcon(), new Target() { @Override - protected void onNewResultImpl(@Nullable Bitmap bitmap) { + public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { WelcomeDialog welcomeDialog = WelcomeDialog.getInstance(it); welcomeDialog.setOnDismissListener(() -> { mViewModel.requestReserveDialog(); @@ -207,9 +206,12 @@ public class MainWrapperFragment extends BaseFragment_ViewPager_Checkable implem } @Override - protected void onFailureImpl(DataSource> dataSource) { + public void onBitmapFailed(Drawable errorDrawable) { mViewModel.requestReserveDialog(); } + + @Override + public void onPrepareLoad(Drawable placeHolderDrawable) {} }); } else { mViewModel.requestReserveDialog();