我正在尝试使用FragmentTransaction实现以下效果。设置自定义动画。
我在动画设置中获得幻灯片没有问题。我的问题是,当幻灯片在动画中运行时,我不知道如何使片段A停留在它所在的位置,并处于片段B之下。不管我怎么做,碎片A似乎在上面。
我怎样才能做到这一点?
这是FragmentTransaction代码:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_right, R.anim.nothing, R.anim.nothing,
R.anim.slide_out_right);
ft.replace(R.id.fragment_content, fragment, name);
ft.addToBackStack(name);
ft.commit();
正如你所看到的,我已经为"out"动画定义了一个动画R.anim.nothing,因为我实际上不希望片段A做任何事情,而不仅仅是在交易期间停留在原地。
以下是动画资源:
slide_in_right.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="100%p"
android:toXDelta="0"
android:zAdjustment="top" />
没有什么xml
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="1.0"
android:toAlpha="1.0"
android:zAdjustment="bottom" />
我找到了一个适合我的解决方案。最后,我用了一个带有FragmentStatePagerAdapter的ViewPager。ViewPager提供滑动行为,FragmentStatePagerAdapter在片段中交换。最后一个技巧是使用PageTransformer,让一个页面在进入页面的“下方”可见。PageTransformer会覆盖ViewPager在页面之间的默认转换。下面是一个PageTransformer示例,它通过在左侧页面上进行翻译和少量缩放来实现效果。
public class ScalePageTransformer implements PageTransformer {
private static final float SCALE_FACTOR = 0.95f;
private final ViewPager mViewPager;
public ScalePageTransformer(ViewPager viewPager) {
this.mViewPager = viewPager;
}
@SuppressLint("NewApi")
@Override
public void transformPage(View page, float position) {
if (position <= 0) {
// apply zoom effect and offset translation only for pages to
// the left
final float transformValue = Math.abs(Math.abs(position) - 1) * (1.0f - SCALE_FACTOR) + SCALE_FACTOR;
int pageWidth = mViewPager.getWidth();
final float translateValue = position * -pageWidth;
page.setScaleX(transformValue);
page.setScaleY(transformValue);
if (translateValue > -pageWidth) {
page.setTranslationX(translateValue);
} else {
page.setTranslationX(0);
}
}
}
}
我不知道你是否还需要一个答案,但我最近也需要这样做,我找到了一种方法来做你想做的事。
我做了这样的东西:
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
MyFragment next = getMyFragment();
ft.add(R.id.MyLayout,next);
ft.setCustomAnimations(R.anim.slide_in_right,0);
ft.show(next);
ft.commit();
我在框架布局中显示我的片段。
它可以很好地工作,但在我看来,旧的片段仍然存在,我让android像他希望的那样管理它,因为如果我把:
ft.remove(myolderFrag);
它在动画期间不显示。
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate android:duration="150" android:fromXDelta="100%p"
android:interpolator="@android:anim/linear_interpolator"
android:toXDelta="0" />
</set>
从片段库1.2.0
开始,修复此问题的推荐方法是将FragmentContainerView
与FragmentTransaction一起使用。setCustomAnimations()
。
根据留档:
对于FragmentContainerView,使用退出动画的片段会在所有其他片段之前绘制。这可确保退出的片段不会出现在视图顶部。
解决此问题的步骤是:
androidx.fragment: fraank: 1.2.0
;
从Lollipop开始,你可以增加进入片段的反翻译Z。它将出现在退出的页面上方。
例如:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ViewCompat.setTranslationZ(getView(), 100.f);
}
如果只想在动画期间修改translationZ值,则应执行以下操作:
@Override
public Animation onCreateAnimation(int transit, final boolean enter, int nextAnim) {
Animation nextAnimation = AnimationUtils.loadAnimation(getContext(), nextAnim);
nextAnimation.setAnimationListener(new Animation.AnimationListener() {
private float mOldTranslationZ;
@Override
public void onAnimationStart(Animation animation) {
if (getView() != null && enter) {
mOldTranslationZ = ViewCompat.getTranslationZ(getView());
ViewCompat.setTranslationZ(getView(), 100.f);
}
}
@Override
public void onAnimationEnd(Animation animation) {
if (getView() != null && enter) {
ViewCompat.setTranslationZ(getView(), mOldTranslationZ);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
return nextAnimation;
}
我有一个,现在我已经将OnClickListener添加到这些TextViews和ImageViews中。 问题:我已经把这个应用到线性布局中,但发生的是,当我点击next按钮时,当前问题将向左滑动,然后出现一个空白屏幕,然后它将滑入并显示下一个问题,但我希望当当前问题滑出时,它应该紧跟在下一个问题之后。
我查看了一些教程,了解片段之间的动画事务。我用这种方法制作动画,效果很好: 但是我想反转这个动画:旧片段滑出到左边,新片段滑入到右边,但是文件的值似乎对我的作用域没有用处。 我怎么能做到呢?
我已经编写了一些代码,可以从高度图中渲染3D世界,现在我也编写了允许行走的代码。问题是,当高度增加时,动画几乎“跳跃”,因为每个单元都相当大。有没有一种简单的方法可以让动画更流畅?(一般来说,我对OpenGL和3D渲染非常陌生,所以我不想讨论插值和更复杂的事情。)
本文向大家介绍Android仿京东顶部搜索框滑动伸缩动画效果,包括了Android仿京东顶部搜索框滑动伸缩动画效果的使用技巧和注意事项,需要的朋友参考一下 最近使用京东发现,京东顶部的搜索框有一个新的伸缩效果,根据用户的手势滑动,伸缩搜索框。觉得效果还不错,就看了下其他的应用有没有这种伸缩的效果,发现安居客也使用了类似的一种效果,然后就想着实现这样的一种动画效果。 首先看下第三方的效果图: 京东效
我试图为我的实现一个平滑的动画,但是当我增加时间(30秒)时,动画不再平滑。 5秒钟的例子: 30秒的例子: 我的进步背景: 我的进度布局: 我的动画制作方法:
如何在侧滑块中制作一些不同类型的动画。有图书馆吗?如果有图书馆,请提供我。