package com.jasonchen.microlang.utils; import android.animation.ObjectAnimator; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.support.v4.app.Fragment; import android.view.View; import android.view.animation.DecelerateInterpolator; import android.widget.ImageView; /** * jasonchen * 2015/04/10 */ public class AnimationUtility { /* public static void translateFragmentY(UserInfoFragment fragment, int from, int to, Animator.AnimatorListener animatorListener) { final View fragmentView = fragment.getView(); if (fragmentView == null) { return; } View view = fragment.header; FragmentViewYWrapper wrapper = new FragmentViewYWrapper(fragmentView); ObjectAnimator objectAnimator = ObjectAnimator.ofInt(wrapper, "change", from, to); objectAnimator.setDuration(300); objectAnimator.setInterpolator(new DecelerateInterpolator()); if (animatorListener != null) { objectAnimator.addListener(new LayerEnablingAnimatorListener(view, animatorListener)); } objectAnimator.start(); }*/ public static void translateFragmentX(Fragment fragment, int from, int to) { final View fragmentView = fragment.getView(); if (fragmentView == null) { return; } FragmentViewXWrapper wrapper = new FragmentViewXWrapper(fragmentView); ObjectAnimator objectAnimator = ObjectAnimator.ofInt(wrapper, "change", from, to); objectAnimator.setDuration(300); objectAnimator.setInterpolator(new DecelerateInterpolator()); objectAnimator.start(); } /*public static void forceConvertActivityFromTranslucent(Activity activity) { try { Method method = Activity.class.getDeclaredMethod("convertFromTranslucent", null); method.setAccessible(true); method.invoke(activity, null); } catch (Throwable ignored) { } }*/ /*public static void forceConvertActivityToTranslucent(Activity activity) { if (Utility.isL()) { try { // Class listener = Class // .forName("android.app.Activity$TranslucentConversionListener"); Method[] methods = Activity.class.getDeclaredMethods(); Method requireMethod = null; for (Method method : methods) { if (method.getName().equals("convertToTranslucent")) { requireMethod = method; } } if (requireMethod != null) { requireMethod.setAccessible(true); requireMethod.invoke(activity, new Object[]{null, null}); } } catch (Throwable e) { e.printStackTrace(); } } else { try { Class<?>[] declaredClasses = Activity.class.getDeclaredClasses(); Class<?> listener = null; for (Class clazz : declaredClasses) { if (clazz.getSimpleName().contains("TranslucentConversionListener")) { listener = clazz; } } Method method = Activity.class.getDeclaredMethod("convertToTranslucent", listener); method.setAccessible(true); method.invoke(activity, new Object[]{null}); } catch (Throwable ignored) { ignored.printStackTrace(); } } }*/ private static class FragmentViewYWrapper { private View view; FragmentViewYWrapper(View view) { this.view = view; } public void setChange(int y) { view.scrollTo(0, y); } } private static class FragmentViewXWrapper { private View view; FragmentViewXWrapper(View view) { this.view = view; } public void setChange(int x) { view.scrollTo(x, 0); } } public static Rect getBitmapRectFromImageView(ImageView imageView) { Drawable drawable = imageView.getDrawable(); Bitmap bitmap = null; if (drawable instanceof BitmapDrawable) { bitmap = ((BitmapDrawable) drawable).getBitmap(); } Rect rect = new Rect(); boolean isVisible = imageView.getGlobalVisibleRect(rect); if (!isVisible) { int[] location = new int[2]; imageView.getLocationOnScreen(location); rect.left = location[0]; rect.top = location[1]; rect.right = rect.left + imageView.getWidth(); rect.bottom = rect.top + imageView.getHeight(); } if (bitmap != null) { int bitmapWidth = bitmap.getWidth(); int bitmapHeight = bitmap.getHeight(); int imageViewWidth = imageView.getWidth() - imageView.getPaddingLeft() - imageView .getPaddingRight(); int imageviewHeight = imageView.getHeight() - imageView.getPaddingTop() - imageView .getPaddingBottom(); float startScale; if ((float) imageViewWidth / bitmapWidth > (float) imageviewHeight / bitmapHeight) { // Extend start bounds horizontally startScale = (float) imageviewHeight / bitmapHeight; } else { startScale = (float) imageViewWidth / bitmapWidth; } bitmapHeight = (int) (bitmapHeight * startScale); bitmapWidth = (int) (bitmapWidth * startScale); int deltaX = (imageViewWidth - bitmapWidth) / 2; int deltaY = (imageviewHeight - bitmapHeight) / 2; rect.set(rect.left + deltaX, rect.top + deltaY, rect.right - deltaX, rect.bottom - deltaY); return rect; } else { return null; } } public static View getAppContentView(Activity activity) { final View appView = activity.findViewById(android.R.id.content); return appView; } }