From 2c6fd5d0d8ed36f1ec817d50973c6c251b983f32 Mon Sep 17 00:00:00 2001 From: huangzhuanghua <401742778@qq.com> Date: Fri, 21 Oct 2016 17:38:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0BitmapUtils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/util/BitmapUtils.java | 87 +++++++++++++++++++ .../com/gh/gamecenter/CropImageActivity.java | 35 ++++++-- .../gh/gamecenter/db/DataCollectionDao.java | 1 - .../newsdetail/NewsDetailAdapter.java | 4 +- .../gamecenter/personal/PersonalFragment.java | 1 - 5 files changed, 118 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/com/gh/common/util/BitmapUtils.java diff --git a/app/src/main/java/com/gh/common/util/BitmapUtils.java b/app/src/main/java/com/gh/common/util/BitmapUtils.java new file mode 100644 index 0000000000..3c16288b34 --- /dev/null +++ b/app/src/main/java/com/gh/common/util/BitmapUtils.java @@ -0,0 +1,87 @@ +package com.gh.common.util; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.media.ExifInterface; + +import java.io.IOException; + +/** + * Created by LGT on 2016/10/21. + */ +public class BitmapUtils { + + /** + * 根据文件路径返回bitmap + * @param filepath 文件路径 + * @param w 宽 + * @param h 高 + * @return bitmap + */ + public static Bitmap getBitmapByFile(String filepath, int w, int h) { + try { + BitmapFactory.Options options = new BitmapFactory.Options(); + // 设置为ture只获取图片大小 + options.inJustDecodeBounds = true; + options.inPreferredConfig = Bitmap.Config.RGB_565; + // 返回为空 + BitmapFactory.decodeFile(filepath, options); + int width = options.outWidth; + int height = options.outHeight; + float scaleWidth = 0.f, scaleHeight = 0.f; + if (width > w || height > h) { + // 缩放 + scaleWidth = ((float) width) / w; + scaleHeight = ((float) height) / h; + } + options.inJustDecodeBounds = false; + int scale = (int) Math.ceil(Math.max(scaleWidth, scaleHeight)); + if (scale % 2 == 1) { + scale += 1; + } + options.inSampleSize = scale; + Bitmap bitmap = BitmapFactory.decodeFile(filepath, options); + bitmap = rotatePicture(filepath, bitmap); + if (bitmap != null) { + return bitmap; + } + return null; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static Bitmap rotatePicture(String path, Bitmap bitmap) { + int rotate = 0; + try { + ExifInterface exifInterface = new ExifInterface(path); + int orientation = exifInterface.getAttributeInt( + ExifInterface.TAG_ORIENTATION, + ExifInterface.ORIENTATION_NORMAL); + switch (orientation) { + case ExifInterface.ORIENTATION_ROTATE_90: + rotate = 90; + break; + case ExifInterface.ORIENTATION_ROTATE_180: + rotate = 180; + break; + case ExifInterface.ORIENTATION_ROTATE_270: + rotate = 270; + break; + } + } catch (IOException e) { + e.printStackTrace(); + } + if (rotate != 0) { + Matrix matrix = new Matrix(); + matrix.setRotate(rotate); + return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), + bitmap.getHeight(), matrix, true); + } else { + return bitmap; + } + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/CropImageActivity.java b/app/src/main/java/com/gh/gamecenter/CropImageActivity.java index b136393519..f8e6a6fe8b 100644 --- a/app/src/main/java/com/gh/gamecenter/CropImageActivity.java +++ b/app/src/main/java/com/gh/gamecenter/CropImageActivity.java @@ -2,34 +2,42 @@ package com.gh.gamecenter; import android.app.Dialog; import android.content.Intent; +import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup.LayoutParams; +import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import com.gh.base.BaseActivity; import com.gh.common.constant.Config; +import com.gh.common.util.BitmapUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.FileUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.TokenUtils; +import com.gh.common.util.Utils; import com.gh.common.view.CropImageCustom; +import com.gh.common.view.CropImageZoomView; import org.apache.http.HttpStatus; import org.json.JSONException; import org.json.JSONObject; import java.io.File; +import java.lang.ref.SoftReference; public class CropImageActivity extends BaseActivity { private CropImageCustom cropimage_custom; + private SoftReference reference; + private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { @@ -107,12 +115,27 @@ public class CropImageActivity extends BaseActivity { rparams.addRule(RelativeLayout.CENTER_VERTICAL); confirm.setLayoutParams(rparams); reuse_actionbar.addView(confirm); - - String path = getIntent().getStringExtra("path"); - - ImageUtils.getInstance(getApplicationContext()).displayFile( - "file://" + path, cropimage_custom.getCropImageZoomView()); - } + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (hasFocus && (reference == null || reference.get() == null)) { + ImageView imageView = cropimage_custom.getCropImageZoomView(); + Bitmap bitmap = BitmapUtils.getBitmapByFile(getIntent().getStringExtra("path"), + imageView.getWidth(), imageView.getHeight()); + if (bitmap != null) { + reference = new SoftReference<>(bitmap); + imageView.setImageBitmap(reference.get()); + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (reference != null) { + reference.get().recycle(); + } + } } diff --git a/app/src/main/java/com/gh/gamecenter/db/DataCollectionDao.java b/app/src/main/java/com/gh/gamecenter/db/DataCollectionDao.java index 9bcc230b09..ce3e51a964 100644 --- a/app/src/main/java/com/gh/gamecenter/db/DataCollectionDao.java +++ b/app/src/main/java/com/gh/gamecenter/db/DataCollectionDao.java @@ -29,7 +29,6 @@ public class DataCollectionDao { try { return dao.queryForEq("type", type); } catch (SQLException e) { - // TODO Auto-generated catch block e.printStackTrace(); } return null; diff --git a/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java index 7f0c9a750e..1f3eda841b 100644 --- a/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java @@ -136,7 +136,7 @@ public class NewsDetailAdapter extends RecyclerView.Adapter { } } List more = new ArrayList<>(); - // TODO 随机三篇文章 + // 随机三篇文章 int[] index = RandomUtils.getRandomArray(list.size() > 3 ? 3 : list.size(), list.size()); for (int i : index) { more.add(list.get(i)); @@ -239,7 +239,7 @@ public class NewsDetailAdapter extends RecyclerView.Adapter { } private void initGameDetailTopViewHolder(GameDetailTopViewHolder viewHolder) { - ImageUtils.getInstance(context).displayFile(gameEntity.getIcon(), viewHolder.gamedetail_iv_thumb); + ImageUtils.getInstance(context).display(gameEntity.getIcon(), viewHolder.gamedetail_iv_thumb); viewHolder.gamedetail_tv_name.setText(gameEntity.getName()); if (gameEntity.getApk() != null && gameEntity.getApk().size() != 0) { for (int i = 0, size = gameEntity.getApk().size(); i < size; i++) { diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java index 477b8fc2e8..5c31debeaa 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -293,7 +293,6 @@ public class PersonalFragment extends Fragment implements View.OnClickListener, super.onActivityResult(requestCode, resultCode, data); if (requestCode == 0x123 && data != null) { Uri selectedImage = data.getData(); - // TODO 华为手机选择图片后有自带预览,如在预览时取消,getData()返回为null if (selectedImage == null) { return; }