package io.bxbxbai.zhuanlan.ui; import android.Manifest; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.annotation.TargetApi; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.drawable.BitmapDrawable; import android.os.Build; import android.os.Bundle; import android.os.SystemClock; import android.renderscript.Allocation; import android.renderscript.RenderScript; import android.renderscript.ScriptIntrinsicBlur; import android.support.v4.app.ActivityCompat; import android.view.View; import android.view.ViewTreeObserver; import android.widget.ImageView; import android.widget.TextView; import butterknife.ButterKnife; import io.bxbxbai.common.StopWatch; import io.bxbxbai.zhuanlan.R; import io.bxbxbai.zhuanlan.utils.FastBlur; import java.util.Random; /** * 闪屏Activity * * @author bxbxbai */ public class SplashActivity extends Activity { private static final int ANIMATION_DURATION = 2000; private static final float SCALE_END = 1.13F; private static final int[] SPLASH_ARRAY = { R.drawable.splash0, R.drawable.splash1, R.drawable.splash2, R.drawable.splash3, R.drawable.splash4, R.drawable.splash5, R.drawable.splash6, R.drawable.splash7, R.drawable.splash8, R.drawable.splash9, R.drawable.splash10, R.drawable.splash11, R.drawable.splash12, R.drawable.splash13, R.drawable.splash14, R.drawable.splash15, R.drawable.splash16, }; private ImageView mSplashImage; private TextView titleView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_entry); mSplashImage = ButterKnife.findById(this, R.id.iv_entry); titleView = ButterKnife.findById(this, R.id.tv_title); Random r = new Random(SystemClock.elapsedRealtime()); mSplashImage.setImageResource(SPLASH_ARRAY[r.nextInt(SPLASH_ARRAY.length)]); // mSplashImage.setImageResource(SPLASH_ARRAY[15]); animateImage(); // applyBlur(); ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } private void animateImage() { ObjectAnimator animatorX = ObjectAnimator.ofFloat(mSplashImage, View.SCALE_X, 1f, SCALE_END); ObjectAnimator animatorY = ObjectAnimator.ofFloat(mSplashImage, View.SCALE_Y, 1f, SCALE_END); AnimatorSet set = new AnimatorSet(); set.setDuration(ANIMATION_DURATION).play(animatorX).with(animatorY); set.start(); set.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { MainActivity.start(SplashActivity.this); SplashActivity.this.finish(); } }); } //http://blog.jobbole.com/63894/ private void applyBlur() { mSplashImage.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { mSplashImage.getViewTreeObserver().removeOnPreDrawListener(this); mSplashImage.buildDrawingCache(); blur(mSplashImage.getDrawingCache(), titleView); return true; } }); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) private void blur(Bitmap bkg, View view) { long startMs = System.currentTimeMillis(); float radius = 10; Bitmap overlay = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(overlay); canvas.translate(-view.getLeft(), -view.getTop()); canvas.drawBitmap(bkg, 0, 0, null); RenderScript rs = RenderScript.create(this); Allocation allocation = Allocation.createFromBitmap(rs, overlay); ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, allocation.getElement()); blur.setInput(allocation); blur.setRadius(radius); blur.forEach(allocation); allocation.copyTo(overlay); view.setBackground(new BitmapDrawable(getResources(), overlay)); rs.destroy(); StopWatch.log(System.currentTimeMillis() - startMs + "ms"); } private void blur2(Bitmap bkg, View view) { long startMs = System.currentTimeMillis(); float scaleFactor = 1; float radius = 20; // if (downScale.isChecked()) { // scaleFactor = 8; // radius = 2; // } Bitmap overlay = Bitmap.createBitmap((int) (view.getMeasuredWidth() / scaleFactor), (int) (view.getMeasuredHeight() / scaleFactor), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(overlay); canvas.translate(-view.getLeft() / scaleFactor, -view.getTop() / scaleFactor); canvas.scale(1 / scaleFactor, 1 / scaleFactor); Paint paint = new Paint(); paint.setFlags(Paint.FILTER_BITMAP_FLAG); canvas.drawBitmap(bkg, 0, 0, paint); overlay = FastBlur.doBlur(overlay, (int) radius, true); view.setBackground(new BitmapDrawable(getResources(), overlay)); // statusText.setText(System.currentTimeMillis() - startMs + "ms"); } }