package com.tiger.quicknews.wedget.slideingactivity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.os.Handler; import android.os.Looper; import android.view.View; import com.tiger.quicknews.activity.BaseActivity; import com.tiger.quicknews.utils.BMapUtil; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.lang.ref.SoftReference; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * Created by chenjishi on 14-3-19. */ public class IntentUtils { public static String KEY_PREVIEW_IMAGE = "preview_image"; static ByteArrayOutputStream baos = null; static Bitmap bitmap = null; /** * start screen capture with no delay * * @param context * @param intent */ public static void startPreviewActivity(Context context, Intent intent, int requestCode) { startPreviewActivity(context, intent, 0, requestCode); } /** * start screen capture after "delay" milliseconds, so the previous * activity's state recover to normal state, such as button click, list item * click,wait them to normal state so we can make a good screen capture * * @param context * @param intent * @param delay time in milliseconds */ public static void startPreviewActivity(final Context context, final Intent intent, long delay, final int requestCode) { final Handler mainThread = new Handler(Looper.getMainLooper()); final Runnable postAction = new Runnable() { @Override public void run() { if (requestCode == 0) { context.startActivity(intent); } else { ((BaseActivity) context).startActivityForResult(intent, requestCode); } } }; /** process screen capture on background thread */ Runnable action = new Runnable() { @Override public void run() { /** * activity's root layout id, you can change the * android.R.id.content to your root layout id */ final View contentView = ((Activity) context).findViewById(android.R.id.content); try { bitmap = Bitmap.createBitmap(contentView.getWidth(), contentView.getHeight(), Bitmap.Config.ARGB_4444); // bitmap = BMapUtil.getBitmapFromViews(contentView); contentView.draw(new Canvas(bitmap)); baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 70, baos); intent.putExtra(KEY_PREVIEW_IMAGE, baos.toByteArray()); } catch (Exception e) { e.printStackTrace(); } finally { try { /** no need to close, actually do nothing */ if (null != baos) baos.close(); if (null != bitmap && !bitmap.isRecycled()) { // bitmap.recycle(); bitmap = null; } } catch (IOException e) { e.printStackTrace(); } } mainThread.post(postAction); } }; if (delay > 0) { ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor(); worker.schedule(action, delay, TimeUnit.MILLISECONDS); } else { try { action.run(); } catch (Exception e) { e.printStackTrace(); } } } }