Android Open Source - UsarActionBarSherlockAndroidStudio Animator Proxy From Project Back to project page UsarActionBarSherlockAndroidStudio .
License The source code is released under:
GNU General Public License
If you think the Android project UsarActionBarSherlockAndroidStudio listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code package com.actionbarsherlock.internal.nineoldandroids.view.animation;
/ * w w w . j a v a 2 s . c o m * /
import java.lang.ref.WeakReference;
import java.util.WeakHashMap;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.os.Build;
import android.util.FloatMath;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Transformation;
public final class AnimatorProxy extends Animation {
public static final boolean NEEDS_PROXY = Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB;
private static final WeakHashMap<View, AnimatorProxy> PROXIES =
new WeakHashMap<View, AnimatorProxy>();
public static AnimatorProxy wrap(View view) {
AnimatorProxy proxy = PROXIES.get(view);
if (proxy == null) {
proxy = new AnimatorProxy(view);
PROXIES.put(view, proxy);
}
return proxy;
}
private final WeakReference<View> mView;
private float mAlpha = 1;
private float mScaleX = 1;
private float mScaleY = 1;
private float mTranslationX;
private float mTranslationY;
private final RectF mBefore = new RectF();
private final RectF mAfter = new RectF();
private final Matrix mTempMatrix = new Matrix();
private AnimatorProxy(View view) {
setDuration(0); //perform transformation immediately
setFillAfter(true); //persist transformation beyond duration
view.setAnimation(this );
mView = new WeakReference<View>(view);
}
public float getAlpha() {
return mAlpha;
}
public void setAlpha(float alpha) {
if (mAlpha != alpha) {
mAlpha = alpha;
View view = mView.get();
if (view != null) {
view.invalidate();
}
}
}
public float getScaleX() {
return mScaleX;
}
public void setScaleX(float scaleX) {
if (mScaleX != scaleX) {
prepareForUpdate();
mScaleX = scaleX;
invalidateAfterUpdate();
}
}
public float getScaleY() {
return mScaleY;
}
public void setScaleY(float scaleY) {
if (mScaleY != scaleY) {
prepareForUpdate();
mScaleY = scaleY;
invalidateAfterUpdate();
}
}
public int getScrollX() {
View view = mView.get();
if (view == null) {
return 0;
}
return view.getScrollX();
}
public void setScrollX(int value) {
View view = mView.get();
if (view != null) {
view.scrollTo(value, view.getScrollY());
}
}
public int getScrollY() {
View view = mView.get();
if (view == null) {
return 0;
}
return view.getScrollY();
}
public void setScrollY(int value) {
View view = mView.get();
if (view != null) {
view.scrollTo(view.getScrollY(), value);
}
}
public float getTranslationX() {
return mTranslationX;
}
public void setTranslationX(float translationX) {
if (mTranslationX != translationX) {
prepareForUpdate();
mTranslationX = translationX;
invalidateAfterUpdate();
}
}
public float getTranslationY() {
return mTranslationY;
}
public void setTranslationY(float translationY) {
if (mTranslationY != translationY) {
prepareForUpdate();
mTranslationY = translationY;
invalidateAfterUpdate();
}
}
private void prepareForUpdate() {
View view = mView.get();
if (view != null) {
computeRect(mBefore, view);
}
}
private void invalidateAfterUpdate() {
View view = mView.get();
if (view == null) {
return ;
}
View parent = (View)view.getParent();
if (parent == null) {
return ;
}
view.setAnimation(this );
final RectF after = mAfter;
computeRect(after, view);
after.union(mBefore);
parent.invalidate(
(int ) FloatMath.floor(after.left),
(int ) FloatMath.floor(after.top),
(int ) FloatMath.ceil(after.right),
(int ) FloatMath.ceil(after.bottom));
}
private void computeRect(final RectF r, View view) {
// compute current rectangle according to matrix transformation
final float w = view.getWidth();
final float h = view.getHeight();
// use a rectangle at 0,0 to make sure we don't run into issues with scaling
r.set(0, 0, w, h);
final Matrix m = mTempMatrix;
m.reset();
transformMatrix(m, view);
mTempMatrix.mapRect(r);
r.offset(view.getLeft(), view.getTop());
// Straighten coords if rotations flipped them
if (r.right < r.left) {
final float f = r.right;
r.right = r.left;
r.left = f;
}
if (r.bottom < r.top) {
final float f = r.top;
r.top = r.bottom;
r.bottom = f;
}
}
private void transformMatrix(Matrix m, View view) {
final float w = view.getWidth();
final float h = view.getHeight();
final float sX = mScaleX;
final float sY = mScaleY;
if ((sX != 1.0f) || (sY != 1.0f)) {
final float deltaSX = ((sX * w) - w) / 2f;
final float deltaSY = ((sY * h) - h) / 2f;
m.postScale(sX, sY);
m.postTranslate(-deltaSX, -deltaSY);
}
m.postTranslate(mTranslationX, mTranslationY);
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
View view = mView.get();
if (view != null) {
t.setAlpha(mAlpha);
transformMatrix(t.getMatrix(), view);
}
}
@Override
public void reset() {
/* Do nothing. */
}
}
Java Source Code List android.support.v4.app.Watson.java com.actionbarsherlock.ActionBarSherlock.java com.actionbarsherlock.BuildConfig.java com.actionbarsherlock.BuildConfig.java com.actionbarsherlock.app.ActionBar.java com.actionbarsherlock.app.SherlockActivity.java com.actionbarsherlock.app.SherlockDialogFragment.java com.actionbarsherlock.app.SherlockExpandableListActivity.java com.actionbarsherlock.app.SherlockFragmentActivity.java com.actionbarsherlock.app.SherlockFragment.java com.actionbarsherlock.app.SherlockListActivity.java com.actionbarsherlock.app.SherlockListFragment.java com.actionbarsherlock.app.SherlockPreferenceActivity.java com.actionbarsherlock.internal.ActionBarSherlockCompat.java com.actionbarsherlock.internal.ActionBarSherlockNative.java com.actionbarsherlock.internal.ResourcesCompat.java com.actionbarsherlock.internal.app.ActionBarImpl.java com.actionbarsherlock.internal.app.ActionBarWrapper.java com.actionbarsherlock.internal.nineoldandroids.animation.AnimatorListenerAdapter.java com.actionbarsherlock.internal.nineoldandroids.animation.AnimatorSet.java com.actionbarsherlock.internal.nineoldandroids.animation.Animator.java com.actionbarsherlock.internal.nineoldandroids.animation.FloatEvaluator.java com.actionbarsherlock.internal.nineoldandroids.animation.FloatKeyframeSet.java com.actionbarsherlock.internal.nineoldandroids.animation.IntEvaluator.java com.actionbarsherlock.internal.nineoldandroids.animation.IntKeyframeSet.java com.actionbarsherlock.internal.nineoldandroids.animation.KeyframeSet.java com.actionbarsherlock.internal.nineoldandroids.animation.Keyframe.java com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator.java com.actionbarsherlock.internal.nineoldandroids.animation.PropertyValuesHolder.java com.actionbarsherlock.internal.nineoldandroids.animation.TypeEvaluator.java com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator.java com.actionbarsherlock.internal.nineoldandroids.view.NineViewGroup.java com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy.java com.actionbarsherlock.internal.nineoldandroids.widget.NineFrameLayout.java com.actionbarsherlock.internal.nineoldandroids.widget.NineHorizontalScrollView.java com.actionbarsherlock.internal.nineoldandroids.widget.NineLinearLayout.java com.actionbarsherlock.internal.view.ActionProviderWrapper.java com.actionbarsherlock.internal.view.StandaloneActionMode.java com.actionbarsherlock.internal.view.View_HasStateListenerSupport.java com.actionbarsherlock.internal.view.View_OnAttachStateChangeListener.java com.actionbarsherlock.internal.view.menu.ActionMenuItemView.java com.actionbarsherlock.internal.view.menu.ActionMenuItem.java com.actionbarsherlock.internal.view.menu.ActionMenuPresenter.java com.actionbarsherlock.internal.view.menu.ActionMenuView.java com.actionbarsherlock.internal.view.menu.ActionMenu.java com.actionbarsherlock.internal.view.menu.BaseMenuPresenter.java com.actionbarsherlock.internal.view.menu.ListMenuItemView.java com.actionbarsherlock.internal.view.menu.MenuBuilder.java com.actionbarsherlock.internal.view.menu.MenuItemImpl.java com.actionbarsherlock.internal.view.menu.MenuItemWrapper.java com.actionbarsherlock.internal.view.menu.MenuPopupHelper.java com.actionbarsherlock.internal.view.menu.MenuPresenter.java com.actionbarsherlock.internal.view.menu.MenuView.java com.actionbarsherlock.internal.view.menu.MenuWrapper.java com.actionbarsherlock.internal.view.menu.SubMenuBuilder.java com.actionbarsherlock.internal.view.menu.SubMenuWrapper.java com.actionbarsherlock.internal.widget.AbsActionBarView.java com.actionbarsherlock.internal.widget.ActionBarContainer.java com.actionbarsherlock.internal.widget.ActionBarContextView.java com.actionbarsherlock.internal.widget.ActionBarView.java com.actionbarsherlock.internal.widget.CapitalizingButton.java com.actionbarsherlock.internal.widget.CapitalizingTextView.java com.actionbarsherlock.internal.widget.CollapsibleActionViewWrapper.java com.actionbarsherlock.internal.widget.IcsAbsSpinner.java com.actionbarsherlock.internal.widget.IcsAdapterView.java com.actionbarsherlock.internal.widget.IcsColorDrawable.java com.actionbarsherlock.internal.widget.IcsLinearLayout.java com.actionbarsherlock.internal.widget.IcsListPopupWindow.java com.actionbarsherlock.internal.widget.IcsProgressBar.java com.actionbarsherlock.internal.widget.IcsSpinner.java com.actionbarsherlock.internal.widget.IcsToast.java com.actionbarsherlock.internal.widget.IcsView.java com.actionbarsherlock.internal.widget.PopupWindowCompat.java com.actionbarsherlock.internal.widget.ScrollingTabContainerView.java com.actionbarsherlock.internal.widget.TabsLinearLayout.java com.actionbarsherlock.view.ActionMode.java com.actionbarsherlock.view.ActionProvider.java com.actionbarsherlock.view.CollapsibleActionView.java com.actionbarsherlock.view.MenuInflater.java com.actionbarsherlock.view.MenuItem.java com.actionbarsherlock.view.Menu.java com.actionbarsherlock.view.SubMenu.java com.actionbarsherlock.view.Window.java com.actionbarsherlock.widget.ActivityChooserModel.java com.actionbarsherlock.widget.ActivityChooserView.java com.actionbarsherlock.widget.SearchView.java com.actionbarsherlock.widget.ShareActionProvider.java com.actionbarsherlock.widget.SuggestionsAdapter.java com.aprendiendodeandroid.usaractionbarsherlockandroidstudio.BuildConfig.java com.aprendiendodeandroid.usaractionbarsherlockandroidstudio.MainActivity.java