diff --git a/app/src/main/java/com/gh/common/util/BitmapUtils.java b/app/src/main/java/com/gh/common/util/BitmapUtils.java index dcdffda1fc..eed3ad93c9 100644 --- a/app/src/main/java/com/gh/common/util/BitmapUtils.java +++ b/app/src/main/java/com/gh/common/util/BitmapUtils.java @@ -7,6 +7,9 @@ import android.graphics.Matrix; import android.graphics.PixelFormat; import android.graphics.drawable.Drawable; import android.media.ExifInterface; +import android.os.Build; + +import com.halo.assistant.HaloApp; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; @@ -186,15 +189,30 @@ public class BitmapUtils { /** * Drawable转Bitmap + * @param isSquare 是否是正方形 */ - public static Bitmap drawableToBitmap(Drawable drawable) { + public static Bitmap drawableToBitmap(Drawable drawable, boolean isSquare) { if (drawable == null) { return null; } + int w,h; + // 取 drawable 的长宽 - int w = drawable.getIntrinsicWidth(); - int h = drawable.getIntrinsicHeight(); + w = drawable.getIntrinsicWidth(); + h = drawable.getIntrinsicHeight(); + + // 在低于 5.1 和运行内存小于 2G 的设备上减小图片大小,避免 OOM,128 * 128 又不是不能看 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP + || DeviceUtils.getTotalRamSizeOfDevice(HaloApp.getInstance().getApplication()) < 2000) { + if (isSquare) { + w = w > 128 ? 128 : w; + h = h > 128 ? 128 : h; + } else { + w = w > 128 ? w / 2 : w; + h = h > 128 ? h / 2 : h; + } + } // 取 drawable 的颜色格式 Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index e44fdd7062..f26b6baaa4 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -130,7 +130,7 @@ public class DialogUtils { ApplicationInfo appInfo = info.applicationInfo; appInfo.sourceDir = apkPath; appInfo.publicSourceDir = apkPath; - Bitmap bitmap = BitmapUtils.drawableToBitmap(appInfo.loadIcon(pm)); + Bitmap bitmap = BitmapUtils.drawableToBitmap(appInfo.loadIcon(pm), true); ImageView imageView = new ImageView(activity); imageView.setLayoutParams(new LinearLayout.LayoutParams(DisplayUtils.dip2px(activity, 25) diff --git a/app/src/main/java/com/gh/gamecenter/adapter/CleanApkAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/CleanApkAdapter.java index d914786a80..edf2462253 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/CleanApkAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/CleanApkAdapter.java @@ -114,7 +114,7 @@ public class CleanApkAdapter extends BaseRecyclerAdapter appInfo.sourceDir = apk_path; appInfo.publicSourceDir = apk_path; Drawable apk_icon = appInfo.loadIcon(pm); - apkEntity.setGameBm(BitmapUtils.drawableToBitmap(apk_icon)); + apkEntity.setGameBm(BitmapUtils.drawableToBitmap(apk_icon, true)); /** apk的绝对路劲 */ apkEntity.setGamePath(apk_path); /** apk的版本名称 String */ diff --git a/app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java index c04a329315..1d7bcffc85 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java @@ -407,7 +407,7 @@ public class InstallFragmentAdapter extends BaseRecyclerAdapter { File file = new File(installedPackage.applicationInfo.sourceDir); fileInfo.setSize(file.length()); Drawable drawable = installedPackage.applicationInfo.loadIcon(pm); - fileInfo.setBitmap(BitmapUtils.drawableToBitmap(drawable)); + fileInfo.setBitmap(BitmapUtils.drawableToBitmap(drawable, true)); fileInfo.setFileTag(String.valueOf(System.currentTimeMillis())); } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/KcSelectGameAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/KcSelectGameAdapter.java index a5eb775c66..af30883bd9 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/KcSelectGameAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/KcSelectGameAdapter.java @@ -104,7 +104,7 @@ public class KcSelectGameAdapter extends BaseRecyclerAdapter { installGameEntity.setGamePath(installedPackage.applicationInfo.sourceDir); try { Drawable drawable = installedPackage.applicationInfo.loadIcon(pm); - installGameEntity.setGameBm(BitmapUtils.drawableToBitmap(drawable)); + installGameEntity.setGameBm(BitmapUtils.drawableToBitmap(drawable, true)); installGameEntity.setGameVersion(installedPackage.versionName); installGameEntity.setGameName(installedPackage.applicationInfo.loadLabel(pm).toString()); diff --git a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java index b69b326af3..97bf40ed4a 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java @@ -136,7 +136,7 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { ApplicationInfo appInfo = info.applicationInfo; appInfo.sourceDir = apkPath; appInfo.publicSourceDir = apkPath; - Bitmap bitmap = BitmapUtils.drawableToBitmap(appInfo.loadIcon(pm)); + Bitmap bitmap = BitmapUtils.drawableToBitmap(appInfo.loadIcon(pm), true); viewHolder.dmIcon.setImageBitmap(bitmap); } } catch (JSONException e) { diff --git a/app/src/main/java/com/gh/gamecenter/qa/select/SelectGameDialogAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/select/SelectGameDialogAdapter.java index f9174ab48a..59a133927f 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/select/SelectGameDialogAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/select/SelectGameDialogAdapter.java @@ -110,7 +110,7 @@ public class SelectGameDialogAdapter extends BaseRecyclerAdapter