下面列出了怎么用android.support.v4.view.ViewPropertyAnimatorCompat的API类实例代码及写法,或者点击链接到github查看源代码。
public void finishRefreshing() {
if (mChildView != null) {
ViewPropertyAnimatorCompat viewPropertyAnimatorCompat = ViewCompat.animate(mChildView);
viewPropertyAnimatorCompat.setDuration(200);
viewPropertyAnimatorCompat.y(ViewCompat.getTranslationY(mChildView));
viewPropertyAnimatorCompat.translationY(0);
viewPropertyAnimatorCompat.setInterpolator(new DecelerateInterpolator());
viewPropertyAnimatorCompat.start();
if (mMaterialHeaderView != null) {
mMaterialHeaderView.onComlete(MaterialRefreshLayout.this);
} else if (mSunLayout != null) {
mSunLayout.onComlete(MaterialRefreshLayout.this);
}
if (refreshListener != null) {
refreshListener.onfinish();
}
}
isRefreshing = false;
progressValue = 0;
}
public void finishRefreshing() {
if (mChildView != null) {
ViewPropertyAnimatorCompat viewPropertyAnimatorCompat = ViewCompat.animate(mChildView);
viewPropertyAnimatorCompat.setDuration(200);
viewPropertyAnimatorCompat.y(ViewCompat.getTranslationY(mChildView));
viewPropertyAnimatorCompat.translationY(0);
viewPropertyAnimatorCompat.setInterpolator(new DecelerateInterpolator());
viewPropertyAnimatorCompat.start();
if (mMaterialHeaderView != null) {
mMaterialHeaderView.onComplete(MaterialRefreshLayout.this);
} else if (mSunLayout != null) {
mSunLayout.onComplete(MaterialRefreshLayout.this);
}
if (refreshListener != null) {
refreshListener.onfinish();
}
}
isRefreshing = false;
progressValue = 0;
}
@Override
public void call(final CompletableSubscriber completableSubscriber) {
final View view = viewWeakRef.get();
if (view == null) {
completableSubscriber.onCompleted();
return;
}
final ViewPropertyAnimatorCompat animator = ViewCompat.animate(view);
completableSubscriber.onSubscribe(createClearSubscription(animator));
if (preTransformActions != null) {
applyActions(preTransformActions, animator);
animator.setDuration(NONE).setStartDelay(NONE)
.withEndAction(() -> runAnimation(completableSubscriber, animator))
.start();
} else {
runAnimation(completableSubscriber, animator);
}
}
public void finishRefreshing() {
if (mChildView != null) {
ViewPropertyAnimatorCompat viewPropertyAnimatorCompat = ViewCompat.animate(mChildView);
viewPropertyAnimatorCompat.setDuration(200);
viewPropertyAnimatorCompat.y(ViewCompat.getTranslationY(mChildView));
viewPropertyAnimatorCompat.translationY(0);
viewPropertyAnimatorCompat.setInterpolator(new DecelerateInterpolator());
viewPropertyAnimatorCompat.start();
if (mMaterialHeaderView != null) {
mMaterialHeaderView.onComlete(MaterialRefreshLayout.this);
} else if (mSunLayout != null) {
mSunLayout.onComlete(MaterialRefreshLayout.this);
}
if (refreshListener != null) {
refreshListener.onfinish();
}
}
isRefreshing = false;
progressValue = 0;
}
public void finishRefreshing() {
if (mChildView != null) {
ViewPropertyAnimatorCompat viewPropertyAnimatorCompat = ViewCompat.animate(mChildView);
viewPropertyAnimatorCompat.setDuration(200);
viewPropertyAnimatorCompat.y(ViewCompat.getTranslationY(mChildView));
viewPropertyAnimatorCompat.translationY(0);
viewPropertyAnimatorCompat.setInterpolator(new DecelerateInterpolator());
viewPropertyAnimatorCompat.start();
if (materialHeadView != null) {
materialHeadView.onComlete(MaterialRefreshLayout.this);
}
if (refreshListener != null) {
refreshListener.onfinish();
}
}
isRefreshing = false;
progressValue = 0;
setProgressValue(0);
}
/** Preform your animation. You do not need to override this in most cases cause the default is pretty good.
* Listeners will be overridden **/
protected ViewPropertyAnimatorCompat animateMoveImpl(final ViewHolder holder, int fromX, int fromY, int toX, int toY) {
final View view = holder.itemView;
final int deltaX = toX - fromX;
final int deltaY = toY - fromY;
ViewCompat.animate(view).cancel();
if (deltaX != 0) {
ViewCompat.animate(view).translationX(0);
}
if (deltaY != 0) {
ViewCompat.animate(view).translationY(0);
}
// TODO: make EndActions end listeners instead, since end actions aren't called when
// vpas are canceled (and can't end them. why?)
// need listener functionality in VPACompat for this. Ick.
return ViewCompat.animate(view).setInterpolator(null).setDuration(getMoveDuration());
}
public void createAnimatorTranslationY(final View v, final float h, final FrameLayout fl) {
ViewPropertyAnimatorCompat viewPropertyAnimatorCompat = ViewCompat.animate(v);
viewPropertyAnimatorCompat.setDuration(250);
viewPropertyAnimatorCompat.setInterpolator(new DecelerateInterpolator());
viewPropertyAnimatorCompat.translationY(h);
viewPropertyAnimatorCompat.start();
viewPropertyAnimatorCompat.setUpdateListener(new ViewPropertyAnimatorUpdateListener() {
@Override
public void onAnimationUpdate(View view) {
float height = ViewCompat.getTranslationY(v);
fl.getLayoutParams().height = (int) height;
fl.requestLayout();
}
});
}
/**
* @param animate whether to animate the change
* @return this, to allow builder pattern
*/
public BadgeItem show(boolean animate) {
mIsHidden = false;
if (isWeakReferenceValid()) {
TextView textView = mTextViewRef.get();
if (animate) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
textView.setScaleX(0);
textView.setScaleY(0);
}
textView.setVisibility(View.VISIBLE);
ViewPropertyAnimatorCompat animatorCompat = ViewCompat.animate(textView);
animatorCompat.cancel();
animatorCompat.setDuration(mAnimationDuration);
animatorCompat.scaleX(1).scaleY(1);
animatorCompat.setListener(null);
animatorCompat.start();
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
textView.setScaleX(1);
textView.setScaleY(1);
}
textView.setVisibility(View.VISIBLE);
}
}
return this;
}
private void animateTitle(int padding, float scale, float alpha) {
if (type == Type.TABLET && isTitleless) {
return;
}
setTopPaddingAnimated(iconView.getPaddingTop(), padding);
ViewPropertyAnimatorCompat titleAnimator = ViewCompat.animate(titleView)
.setDuration(ANIMATION_DURATION)
.scaleX(scale)
.scaleY(scale);
titleAnimator.alpha(alpha);
titleAnimator.start();
}
private void animate() {
ImageView logoImageView = (ImageView) findViewById(R.id.img_logo);
ViewGroup container = (ViewGroup) findViewById(R.id.container);
ViewCompat.animate(logoImageView)
.translationY(-250)
.setStartDelay(STARTUP_DELAY)
.setDuration(ANIM_ITEM_DURATION).setInterpolator(
new DecelerateInterpolator(1.2f)).start();
for (int i = 0; i < container.getChildCount(); i++) {
View v = container.getChildAt(i);
ViewPropertyAnimatorCompat viewAnimator;
if (!(v instanceof Button)) {
viewAnimator = ViewCompat.animate(v)
.translationY(50).alpha(1)
.setStartDelay((ITEM_DELAY * i) + 500)
.setDuration(1000);
} else {
viewAnimator = ViewCompat.animate(v)
.scaleY(1).scaleX(1)
.setStartDelay((ITEM_DELAY * i) + 500)
.setDuration(500);
}
viewAnimator.setInterpolator(new DecelerateInterpolator()).start();
}
}
@Override
protected ViewPropertyAnimatorCompat onAnimatedAdd(RecyclerView.ViewHolder holder) {
return ViewCompat.animate(holder.itemView)
.translationY(0)
.setInterpolator(mInterpolator)
.setStartDelay(offsetDelay*holder.getLayoutPosition());
}
@Override
protected ViewPropertyAnimatorCompat onAnimateAdd(RecyclerView.ViewHolder holder) {
if(!mSearchView.isActivated()) return null;
return ViewCompat.animate(holder.itemView)
.translationY(0)
.alpha(1)
.setStartDelay((getAddDuration() / 2) * holder.getLayoutPosition())
.setInterpolator(INTERPOLATOR_ADD);
}
@Override
protected ViewPropertyAnimatorCompat onAnimateRemove(RecyclerView.ViewHolder holder) {
return ViewCompat.animate(holder.itemView)
.alpha(0)
.setStartDelay(0)
.setInterpolator(INTERPOLATOR_REMOVE);
}
public void createAnimatorTranslationY(final View v, final float h, final FrameLayout fl) {
ViewPropertyAnimatorCompat viewPropertyAnimatorCompat = ViewCompat.animate(v);
viewPropertyAnimatorCompat.setDuration(250);
viewPropertyAnimatorCompat.setInterpolator(new DecelerateInterpolator());
viewPropertyAnimatorCompat.translationY(h);
viewPropertyAnimatorCompat.start();
viewPropertyAnimatorCompat.setUpdateListener(new ViewPropertyAnimatorUpdateListener() {
@Override
public void onAnimationUpdate(View view) {
float height = ViewCompat.getTranslationY(v);
fl.getLayoutParams().height = (int) height;
fl.requestLayout();
}
});
}
@CheckResult
@NonNull
public static Observable<View> starts(ViewPropertyAnimatorCompat animator) {
checkNotNull(animator, "animator == null");
return Observable.create(
new ViewPropertyAnimatorListenerOnSubscribe(animator, AnimationEvent.START));
}
@CheckResult
@NonNull
public static Observable<View> ends(ViewPropertyAnimatorCompat animator) {
checkNotNull(animator, "animator == null");
return Observable.create(
new ViewPropertyAnimatorListenerOnSubscribe(animator, AnimationEvent.END));
}
@CheckResult
@NonNull
public static Observable<View> cancels(ViewPropertyAnimatorCompat animator) {
checkNotNull(animator, "animator == null");
return Observable.create(
new ViewPropertyAnimatorListenerOnSubscribe(animator, AnimationEvent.CANCEL));
}
@CheckResult
@NonNull
public static Observable<View> updates(ViewPropertyAnimatorCompat animator) {
checkNotNull(animator, "animator == null");
return Observable.create(
new ViewPropertyAnimatorUpdateListenerOnSubscribe(animator));
}
public AnimateOnSubscribe(final WeakReference<View> viewWeakRef, @Nullable final List<Action1<ViewPropertyAnimatorCompat>> preAnimationActions,
final List<Action1<ViewPropertyAnimatorCompat>> animationActions,
final Action1<View> onAnimationCancelAction) {
this.viewWeakRef = viewWeakRef;
this.preTransformActions = preAnimationActions;
this.animationActions = animationActions;
this.onAnimationCancelAction = onAnimationCancelAction;
}
private Subscription createClearSubscription(final ViewPropertyAnimatorCompat animator) {
return new ClearSubscription(() -> {
animator.setListener(new ViewPropertyAnimatorListenerAdapter() {
@Override
public void onAnimationCancel(final View view) {
onAnimationCancelAction.call(view);
}
});
animator.cancel();
animator.setListener(null);
});
}
public void createAnimatorTranslationY(final View v, final float h, final FrameLayout fl) {
ViewPropertyAnimatorCompat viewPropertyAnimatorCompat = ViewCompat.animate(v);
viewPropertyAnimatorCompat.setDuration(250);
viewPropertyAnimatorCompat.setInterpolator(new DecelerateInterpolator());
viewPropertyAnimatorCompat.translationY(h);
viewPropertyAnimatorCompat.start();
viewPropertyAnimatorCompat.setUpdateListener(new ViewPropertyAnimatorUpdateListener() {
@Override
public void onAnimationUpdate(View view) {
float height = ViewCompat.getTranslationY(v);
fl.getLayoutParams().height = (int) height;
fl.requestLayout();
}
});
}
public void createAnimatorTranslationY(final View v, final float h, final FrameLayout fl) {
ViewPropertyAnimatorCompat viewPropertyAnimatorCompat = ViewCompat.animate(v);
viewPropertyAnimatorCompat.setDuration(200);
viewPropertyAnimatorCompat.setInterpolator(new DecelerateInterpolator());
viewPropertyAnimatorCompat.translationY(h);
viewPropertyAnimatorCompat.start();
viewPropertyAnimatorCompat.setUpdateListener(new ViewPropertyAnimatorUpdateListener() {
@Override
public void onAnimationUpdate(View view) {
float height = ViewCompat.getTranslationY(v);
fl.getLayoutParams().height = (int) height;
fl.requestLayout();
}
});
}
@Override
protected ViewPropertyAnimatorCompat onAnimateAdd(RecyclerView.ViewHolder holder) {
if(!mSearchView.isActivated()) return null;
return ViewCompat.animate(holder.itemView)
.translationY(0)
.alpha(1)
.setStartDelay((getAddDuration() / 2) * holder.getLayoutPosition())
.setInterpolator(INTERPOLATOR_ADD);
}
@Override
protected ViewPropertyAnimatorCompat onAnimateRemove(RecyclerView.ViewHolder holder) {
return ViewCompat.animate(holder.itemView)
.alpha(0)
.setStartDelay(0)
.setInterpolator(INTERPOLATOR_REMOVE);
}
public static ViewPropertyAnimatorCompat defaultChangeOldViewAnim(
View view, final BaseItemAnimator.ChangeInfo changeInfo) {
return ViewCompat.animate(view)
.translationX(changeInfo.toX - changeInfo.fromX)
.translationY(changeInfo.toY - changeInfo.fromY)
.alpha(0);
}
public static ViewPropertyAnimatorCompat defaultChangeNewViewAnim(
View view, final BaseItemAnimator.ChangeInfo changeInfo) {
return ViewCompat.animate(view)
.translationX(0)
.translationY(0)
.alpha(1);
}
public static ViewPropertyAnimatorCompat teleportChangeOldViewAnim(
View view, final BaseItemAnimator.ChangeInfo changeInfo) {
return ViewCompat.animate(view)
.scaleX(0)
.scaleY(0)
.alpha(0);
}
public static ViewPropertyAnimatorCompat teleportChangeNewViewAnim(
View view, final BaseItemAnimator.ChangeInfo changeInfo) {
return ViewCompat.animate(view)
.scaleX(1)
.scaleY(1)
.alpha(1);
}
public static ViewPropertyAnimatorCompat flipDownIn(final View view) {
return ViewCompat.animate(view).withStartAction(
new Runnable() {
@Override
public void run() {
ViewCompat.setTranslationX(view, -(view.getMeasuredWidth() / 2));
ViewCompat.setRotationY(view, -90);
}
})
.rotationY(0)
.translationX(0)
.setInterpolator(new BounceInterpolator());
}
public static ViewPropertyAnimatorCompat flipDownOut(final View view) {
return ViewCompat.animate(view)
.rotationY(90)
.translationX(-(view.getMeasuredWidth() / 4))
.scaleX(0.5F)
.scaleY(0.5F)
.setInterpolator(new AccelerateInterpolator());
}