package com.guo.duoduo.airplayreceiver.ui; import java.lang.ref.WeakReference; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; import com.guo.duoduo.airplayreceiver.MyController; import com.guo.duoduo.airplayreceiver.R; import com.guo.duoduo.airplayreceiver.constant.Constant; import com.guo.duoduo.airplayreceiver.httpProcess.HttpProcess; import com.guo.duoduo.airplayreceiver.httpcore.RequestListenerThread; /** * Created by Guo.Duo duo on 2015/8/23. */ public class ImageActivity extends Activity { private static final String tag = ImageActivity.class.getSimpleName(); private ImageView iv; private MyController mController; private ImageHandler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_image); handler = new ImageHandler(ImageActivity.this); mController = new MyController(ImageActivity.class.getName(), handler); initView(); } private void initView() { iv = (ImageView) findViewById(R.id.image_view); Intent intent = getIntent(); if (intent != null) { byte[] pic = intent.getByteArrayExtra("picture"); this.showImage(pic); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intent != null) { byte[] pic = intent.getByteArrayExtra("picture"); this.showImage(pic); } } private void showImage(byte[] pic) { //感谢 MilesChan 2015-09-18 BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferQualityOverSpeed = true; //提升画质 int size = (options.outWidth * options.outHeight); int size_limit = 1920 * 1080 * 4; if (size > 1920 * 1080 * 4) { int zoomRate = (int) Math.ceil(size * 1.0 / size_limit); if (zoomRate <= 0) zoomRate = 1; options.inSampleSize = zoomRate; } if (!Thread.currentThread().isInterrupted()) { options.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeByteArray(pic, 0, pic.length, options); iv.setImageBitmap(bitmap); } } public void onBackPressed() { super.onBackPressed(); } public void onDestroy() { super.onDestroy(); Log.d(tag, "airplay ImageActivity onDestroy"); RequestListenerThread.photoCacheMaps.clear(); HttpProcess.photoCache.clear(); mController.destroy(); } private static class ImageHandler extends Handler { private WeakReference<ImageActivity> imageActivityWeakReference; public ImageHandler(ImageActivity activity) { imageActivityWeakReference = new WeakReference<ImageActivity>(activity); } @Override public void handleMessage(Message msg) { final ImageActivity activity = this.imageActivityWeakReference.get(); if (activity == null) { return; } if (activity.isFinishing()) return; switch (msg.what) { case Constant.Msg.Msg_Stop : activity.finish(); break; case Constant.Msg.Msg_Video_Play : activity.finish(); break; } } } }