没有人知道Pinterest或Tumblr如何在那里实现了“回扫”方法。
即在Pinterest上,您可以单击新闻源上的帖子。比DetailActivity
启动,并显示所选帖子的详细信息。比您可以按“后退”按钮返回新闻源活动,或者您可以向左滑动(详细信息活动)以返回新闻源活动。
视频:http://youtu.be/eVcSCWetnTA
通常我会使用overridePendingTransition()
,但是overridePendingTransition()
会制作动画(资源ID如R.anim.foo
)。仅当用户执行滑动手势时,Pinterest和Tumblr才会启动动画。根据手指的移动,它们还支持某种“逐帧动画”。因此,它们可以跟踪手指移动的距离并为过渡设置动画,使其达到相应的百分比值。
我知道如何使用带有FragmentTransaction
的“真实Java” Animation / AnimatorSet对象来为片段替换设置动画。对于片段,我必须重写onCreateAnimator()
,但是我不知道如何使用Activity实现类似的东西。活动是否有onCreateAnimator()
(或类似内容)?也不确定如何滑动行为,因为它现在还没有启动动画,而是逐步改变了Window / Activity / Fragment或其他任何属性...
有什么建议吗?
编辑:我在youtube上找到了有关pinterest应用的视频:http://youtu.be/eVcSCWetnTA那就是我想要实现的。
我想Pinterest正在使用Fragments和onCreateAnimator()
实现“向后滑动”。由于我的应用程序已在一个活动中包含Fragment和ChildFragments,因此如果可以为Activity实施它,对我来说将变得容易得多。
更多:我知道如何检测滑动手势,这不是我要的。观看youtube视频:http://youtu.be/eVcSCWetnTA
更新:我创建了一个小库,它的行为与Pinterest或Tumblrs实现不完全相同,但是对我的应用程序来说,这似乎是一个不错的解决方案:https://github.com/sockeqwe/SwipeBack?source=c
[您似乎正在寻找的效果是android开发人员网站中ViewPager的示例之一。
检出http://developer.android.com/training/animation/screen-slide.html#depth-page,在深度页面转换器部分。它具有视频和源代码。
使用ViewPager.PageTransformer,您可以决定从一页切换到下一页时页面的表现。
样本和您链接到的视频之间的唯一区别是,左右似乎是倒置的,但是对于我在问题中链接的YouTube video上看到的内容,应该是一个很好的起点。这两个视图上的操作必须交换。如这段代码所示(mPager.setPageTransformer
的第一个参数应为reverseDrawingOrder
= false)。请注意,中间的两个if
部分已交换,并且position
变量的处理与开关端略有不同。弹性效果留作练习。请在分享时分享!
package com.example.android.animationsdemo;
import android.support.v4.view.ViewPager;
import android.view.View;
public class SinkPageTransformer implements ViewPager.PageTransformer {
private static float MIN_SCALE = 0.75f;
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 0) { // [-1,0]
// Fade the page out.
view.setAlpha(1 + position);
// Counteract the default slide transition
view.setTranslationX(pageWidth * -position);
// Scale the page down (between MIN_SCALE and 1)
float scaleFactor = MIN_SCALE
+ (1 - MIN_SCALE) * (1 - Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
} else if (position <= 1) { // (0,1]
// Use the default slide transition when moving to the left page
view.setAlpha(1);
view.setTranslationX(0);
view.setScaleX(1);
view.setScaleY(1);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
并且以防万一,带有示例的页面不整洁,这是该部分的原始代码:
public class DepthPageTransformer implements ViewPager.PageTransformer {
private static float MIN_SCALE = 0.75f;
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 0) { // [-1,0]
// Use the default slide transition when moving to the left page
view.setAlpha(1);
view.setTranslationX(0);
view.setScaleX(1);
view.setScaleY(1);
} else if (position <= 1) { // (0,1]
// Fade the page out.
view.setAlpha(1 - position);
// Counteract the default slide transition
view.setTranslationX(pageWidth * -position);
// Scale the page down (between MIN_SCALE and 1)
float scaleFactor = MIN_SCALE
+ (1 - MIN_SCALE) * (1 - Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
此库允许您像在iOS中一样打开片段并使用滑动将其关闭
更新:解决了该项目的内存使用问题,并将幻灯片样式更改为iOS之类。
我编写了一个与Pinterest和tumblr完全一样的演示,您只需扩展BaseActivity并获得滑动效果,即可顺利工作!
检查此:https://github.com/chenjishi/SlideActivity
和屏幕截图:>>
[我发现了一个基于SwipeBack的GitHub项目,例如Pinterest。
我能够在15分钟内完成此操作,对于开始来说还不错。如果您花一些时间,也许可以对其进行优化。
我刚刚检查了层次结构查看器。似乎他们使用的是ViewPager和上一个活动的屏幕截图。
我建议您执行以下操作:
所以我想我自己找到了解决方案:
我写了一个项目。它使您可以轻松开发通过Fragments导航的应用程序,其性能类似于Pinterest。
我正在我当前正在研究的项目中处理这个问题,并提出了以下代码。也许它现在与您无关,但可以帮助本文中的新人。 :)