我正在尝试设置一个视图的动画,并在一些DP被滚动后隐藏它,我把一切都做得很好,但问题是,当你在应该触发动画的Y值之前或之后缓慢滚动时,它会弹得很厉害。
我认为轻弹是因为我必须将其可见性设置为Gone,并将其他视图更新为match_parent,它不会仅与TraslationY一起工作:
view.animate()
.translationY(-view.getBottom())
.alpha(0)
.setDuration(HEADER_HIDE_ANIM_DURATION)
.setInterpolator(new DecelerateInterpolator());
我试图将布局设置为相对,并将2视为匹配父对象,以查看是否可以避免可见性更改,但没有成功。。。
我已经实现了Google I/O 2014 BaseActivity中所有必需的代码。java文件:https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/BaseActivity.java#L17
动画工作...但是我假设,由于我的自定义视图不是具有覆盖属性的动作栏,自定义视图不会离开,并且下面的LinearLayout不会填充空白空间(没有)。
因此,我让它与animationlistener一起工作,并在动画结束时将customview visibility设置为gone,但当您接近触发动画的预期Y点时,它将以可怕的方式闪烁(当customview visibility消失时闪烁,下面的LinearLayout需要调整自身大小以填充空白空间,如果您在此处缓慢滚动,它将快速重复)。
XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false"
android:animateLayoutChanges="true">
<com.project.app.layouts.TabsLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tabs">
<FrameLayout
android:id="@+id/content_frame_header"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1"
android:background="@android:color/white"/>
</LinearLayout>
</RelativeLayout>
当它不是actionbar时,有什么方法可以做到这一点吗?
编辑:添加了一条注释,说明当你在Y点周围缓慢滚动,触发动画隐藏/显示时,它将如何弹动。
我用了一种稍微不同的方式。请注意,我使用的调用需要SDK 19(KitKat),但您仍然可以使用ViewPropertyAnimatorCompat进行调用
我有一个框架布局,有标题视图和主视图,标题视图在前面。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<include layout="@layout/main_layout" android:id="@+id/main_layout" />
<include layout="@layout/header_layout" android:id="@+id/header_layout" />
</FrameLayout>
一旦测量了视图(在onResume期间发布runnable),我就将主视图的高度设置为页眉的高度。
在“隐藏并显示”动画中,我添加了一个更新侦听器,并在其中更新主视图的顶部填充,使其成为标题的高度,即Y轴上的平移。
final View header = findViewById(R.id. header_layout);
header.animate()
.translationY(-header.getBottom())
.setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.setUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int top = (int) (header.getHeight()+header.getTranslationY());
findViewById(R.id.main_view).setPadding(0, top, 0, 0);
}
});
这使得它更流畅,因为填充与翻译一起更新。
实际上,使用ViewPropertyAnimatorCompat设置AnimationListener不起作用。监听器永远不会被调用,所以为了向后兼容,我选择了这个解决方案,虽然不优雅,但至少它可以在KitKat之前的设备上工作:
final View mainView = findViewById(R.id.main_view);
Runnable mainUpdateRunnable = new Runnable() {
@Override
public void run() {
int top = (int) (header.getHeight()+header.getTranslationY());
mainView.setPadding(0, top, 0, 0);
if (mAnimatingHeader) {
mainView.post(this);
}
}
};
mainView.post(mainUpdateRunnable);
使用AnimationListener更新变量mAnimatingHeader(它可以工作)
我建议您检查视图的值。getBottom()
在这两种情况下(无论何时有效)
可能是因为视图返回的值。getBottom()
非常大
在代码中添加这一行:
Log.i("YourAppName", "view.getBottom(): -" + view.getBottom());
view.animate()
.translationY(-view.getBottom())
.alpha(0)
.setDuration(HEADER_HIDE_ANIM_DURATION)
.setInterpolator(new DecelerateInterpolator());
然后检查您的日志以查看值是否相同。
我建议您在清单文件中使用android:hardwareAccelerated=“true”属性。它将使用设备的GPU绘制视图和动画。
我看过一些样品,但没有一个适合我的需要。 我已经为动画创建了两个xml文件,但我不知道在更改的可见性时如何启动它们。
仍然像这样显示和隐藏视图: 但如果我必须使用向上滑动和向下滑动动画来显示和隐藏,该怎么办
我有一个包含4个嵌套线性布局的线性布局。我需要隐藏第一个嵌套布局并显示2和3,然后隐藏2和3并显示1。我想用滑动效果对这些过渡进行动画处理。所以有屏幕的第一张幻灯片,然后是2和3幻灯片。我设法使1滑出动画(虽然不是很顺利),但不知道如何从视图继续滑动。去查看。可见。 如果没有动画,我只需在1号做SetVisibly来隐藏它,然后在2/3号做SetVisibly来拍摄它们,这是非常容易出错的,文本重
问题内容: 在iOS 11中,a中的隐藏动画的行为已更改,但是我无法在任何地方找到该文档。 iOS 10 iOS 11 两者中的代码是这样的: 如何在iOS 11上还原以前的行为? 问题答案: 只是有同样的问题。该修复程序将添加到动画块中。您要隐藏的物品的容器在哪里? 不确定为什么这在iOS 11中突然成为一个问题,但公平地说,这一直是推荐的方法。
对不起,我的英语…我会试着解释我想做什么。我有一个项目。它可以在链接上下载: < Li > https://drive . Google . com/file/d/0 bxhio ufkk 3 upcxjngtmvkg 4 tdq/view?usp =共享 正如你看到的截图: http://pixs.ru/showimage/Screenshot_9509352_15647059.png “隐藏/
以下是我到目前为止的布局: 我尝试通过编程方式向FrameLayout添加一个ImageButton,但这似乎不起作用。