package com.mingle.sweetpick; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.mingle.utils.Blur; /** * @author zzz40500 * @version 1.0 * @date 2015/8/9. * @github: https://github.com/zzz40500 */ public class BlurEffect implements Effect { private float Value; private BlurAsyncTask mBlurAsyncTask; public BlurEffect(float value) { Value = value; } public void setValue(float value) { Value = value; } @Override public float getValue() { return Value; } @Override public void effect(ViewGroup vp, ImageView view) { if(mBlurAsyncTask!= null){ mBlurAsyncTask.cancel(true); } mBlurAsyncTask= new BlurAsyncTask(vp, view, Blur.convertFromView(vp)); mBlurAsyncTask.execute((int) Value); } /** * Async task used to process blur out of ui thread */ private class BlurAsyncTask extends AsyncTask<Integer, Void, Bitmap> { private View mViewGroup; private ImageView mImageView; private Bitmap mOriginalBitmap; private Context mContext; // private long starTime; public BlurAsyncTask(View viewGroup, ImageView imageView, Bitmap originalBitmap) { mOriginalBitmap = originalBitmap; mViewGroup = viewGroup; mImageView = imageView; } @Override protected void onPreExecute() { super.onPreExecute(); mContext = mViewGroup.getContext(); mImageView.setImageBitmap(null); // starTime=System.currentTimeMillis(); // } @Override protected Bitmap doInBackground(Integer... params) { //process to the blue if (!isCancelled() && mOriginalBitmap != null) { // Bitmap b // =Bitmap.createScaledBitmap(mOriginalBitmap, mOriginalBitmap.getWidth() / 4, // mOriginalBitmap.getHeight() / 4, false); // // if (b == null) { // b = mOriginalBitmap; // } Bitmap bm = Blur.fastblur(mContext, mOriginalBitmap, params[0]); mOriginalBitmap.recycle(); mOriginalBitmap = null; return bm; } else { return null; } } @Override @SuppressLint("NewApi") protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if (bitmap != null) { mImageView.setImageBitmap(bitmap); } // Log.e("tag",System.currentTimeMillis()-starTime+"ms"); mViewGroup.destroyDrawingCache(); mViewGroup.setDrawingCacheEnabled(false); mViewGroup = null; mImageView = null; mContext = null; } } }