Google收件箱喜欢RecyclerView项目打开动画
Google Inbox like RecyclerView item open animation
目前,我正在尝试实现 Google 收件箱类似 RecyclerView
的行为,我对电子邮件打开动画很好奇。
我的问题是:该怎么做?我的意思是,他们使用了哪种方法?他们是否使用 ItemAnimator.dispatchChangeStarting()
并更改它的高度以填充父级?或者别的东西?如果他们这样做了,他们如何通过拉动手势关闭它,同时底层 RecyclerView
元素略微可见。
任何人都可以帮我指向一些库或代码 snippets/examples?
你的意思是:recyclerview 作为一个加载项目,或者一次加载一个项目然后按下加载下一个屏幕。
我在recyclerview中留下了一个如何收费的例子,并给出了一个动画
public class CreateAnimationView {
private static int contador;
Integer colorFrom = R.color.myAccentColor;
Integer colorTo = Color.RED;
public static AnimatorSet createAnimation(View view) {
ObjectAnimator fadeOut = ObjectAnimator.ofFloat(view, "alpha",
0f);
fadeOut.setDuration(300);
ObjectAnimator mover = ObjectAnimator.ofFloat(view,
"translationX", -500f, 0f);
mover.setDuration(400);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(view, "alpha",
0f, 1f);
fadeIn.setDuration(300);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(mover);
animatorSet.start();
return animatorSet;
}
... more animations methods.
}
在你的 RecyclerViewAdapter 中:
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
GruposCardView gruposCardView = gruposCardViews.get(position);
CreateAnimationView.createAnimationRandom(viewHolder.cardView);
...}
如果不在 recyclerview 中,您可以传递布局并使用此动画或从中创建一个。
public static AnimatorSet createAnimationCollapseXY(View view) {
ObjectAnimator scaleXOut = ObjectAnimator.ofFloat(view, "scaleX", 1f, 0f).setDuration(400);
ObjectAnimator scaleXIn = ObjectAnimator.ofFloat(view, "scaleX", 0f, 1f).setDuration(300);
ObjectAnimator scaleYOut = ObjectAnimator.ofFloat(view, "scaleY", 1f, 0f).setDuration(400);
ObjectAnimator scaleYIn = ObjectAnimator.ofFloat(view, "scaleY", 0f, 1f).setDuration(300);
ObjectAnimator rotateClockWise = ObjectAnimator.ofFloat(view, "rotation", 0f, 360f).setDuration(400);
ObjectAnimator rotateCounterClockWise = ObjectAnimator.ofFloat(view, "rotation", 0f, -360f).setDuration(400);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(scaleXIn, scaleYIn);
//animatorSet.setStartDelay(1200);
animatorSet.start();
return animatorSet;
}
目前,我正在尝试实现 Google 收件箱类似 RecyclerView
的行为,我对电子邮件打开动画很好奇。
我的问题是:该怎么做?我的意思是,他们使用了哪种方法?他们是否使用 ItemAnimator.dispatchChangeStarting()
并更改它的高度以填充父级?或者别的东西?如果他们这样做了,他们如何通过拉动手势关闭它,同时底层 RecyclerView
元素略微可见。
任何人都可以帮我指向一些库或代码 snippets/examples?
你的意思是:recyclerview 作为一个加载项目,或者一次加载一个项目然后按下加载下一个屏幕。
我在recyclerview中留下了一个如何收费的例子,并给出了一个动画
public class CreateAnimationView {
private static int contador;
Integer colorFrom = R.color.myAccentColor;
Integer colorTo = Color.RED;
public static AnimatorSet createAnimation(View view) {
ObjectAnimator fadeOut = ObjectAnimator.ofFloat(view, "alpha",
0f);
fadeOut.setDuration(300);
ObjectAnimator mover = ObjectAnimator.ofFloat(view,
"translationX", -500f, 0f);
mover.setDuration(400);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(view, "alpha",
0f, 1f);
fadeIn.setDuration(300);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(mover);
animatorSet.start();
return animatorSet;
}
... more animations methods.
}
在你的 RecyclerViewAdapter 中:
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
GruposCardView gruposCardView = gruposCardViews.get(position);
CreateAnimationView.createAnimationRandom(viewHolder.cardView);
...}
如果不在 recyclerview 中,您可以传递布局并使用此动画或从中创建一个。
public static AnimatorSet createAnimationCollapseXY(View view) {
ObjectAnimator scaleXOut = ObjectAnimator.ofFloat(view, "scaleX", 1f, 0f).setDuration(400);
ObjectAnimator scaleXIn = ObjectAnimator.ofFloat(view, "scaleX", 0f, 1f).setDuration(300);
ObjectAnimator scaleYOut = ObjectAnimator.ofFloat(view, "scaleY", 1f, 0f).setDuration(400);
ObjectAnimator scaleYIn = ObjectAnimator.ofFloat(view, "scaleY", 0f, 1f).setDuration(300);
ObjectAnimator rotateClockWise = ObjectAnimator.ofFloat(view, "rotation", 0f, 360f).setDuration(400);
ObjectAnimator rotateCounterClockWise = ObjectAnimator.ofFloat(view, "rotation", 0f, -360f).setDuration(400);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(scaleXIn, scaleYIn);
//animatorSet.setStartDelay(1200);
animatorSet.start();
return animatorSet;
}