gpt4 book ai didi

android - 在动画期间保持 View 在顶部

转载 作者:太空狗 更新时间:2023-10-29 13:21:22 26 4
gpt4 key购买 nike

我无法在 Activity 转换期间将 View 保持在顶部。卡片左侧的图片是一个共享元素,它扩展到覆盖第二个 Activity 的一半,我有一个从底部滑入的 FAB。我将饮料的 ImageView 作为共享元素过渡,FAB 是从底部开始的滑动过渡。

在FAB的滑动动画过程中,它停留在ImageView的下方,如第二张图所示。然而,在完成动画后,它会弹出到 ImageView 的顶部,如您在第三张图片中所见。我在退出过渡期间遇到了同样的问题,当它开始滑动时它立即弹出到 ImageView 下面。

我希望 FAB 在整个过程中都在 ImageView 之上,我该如何实现呢?

主要 Activity :

FAB还在滑动时的次要Activity:

FAB滑动完毕时的次要Activity: enter image description here

辅助 Activity 的 XML 文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/drinkImage"
android:layout_width="match_parent"
android:layout_height="300dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:gravity="start"
android:transitionName="@string/drink_image_transition"
/>

<TextView
android:padding="8dp"
android:id="@+id/drinkName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:translationY="@dimen/detail_drink_name_vertical_offset"
android:textSize="24sp"
android:textColor="@color/text_primary"
android:transitionName="@string/drink_name_transition"
/>

<ImageButton
android:id="@+id/fab"
android:layout_width="@dimen/fab_size_normal"
android:layout_height="@dimen/fab_size_normal"
android:layout_margin="@dimen/add_button_margin"
android:translationX="@dimen/detail_fab_horizontal_offset"
android:translationY="@dimen/detail_fab_vertical_offset"
android:background="@drawable/fab_shape"
android:elevation="@dimen/elevation_low"
android:src="@drawable/fab_ic_add"
android:stateListAnimator="@anim/button_elevation"
android:transitionName="fab_transition"
/>
</RelativeLayout>

辅助 Activity 的 onCreate() 方法:

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.details_drink);

//grab Drink parcel
Drink d = getIntent().getParcelableExtra("drink");

//set up image
ImageView i = (ImageView) findViewById(R.id.drinkImage);
i.setImageDrawable(this.getResources().getDrawable(d.getImageResourceID(this)));

//set up text
TextView t = (TextView) findViewById(R.id.drinkName);
t.setText(d.name);

Transition ts = new Slide();

//don't want status bar and navigation bar to slide across screen
ts.excludeTarget(android.R.id.statusBarBackground, true);
ts.excludeTarget(android.R.id.navigationBarBackground, true);
ts.setDuration(3000);

getWindow().setEnterTransition(ts);
getWindow().setExitTransition(ts);

//This line gets it to work! As Pavel suggested
//getWindow().setSharedElementsUseOverlay(false);
}

最佳答案

Android 默认使用 ViewOverlay用于 Activity 转换。这就是共享元素绘制在其他所有元素之上的原因。

您可以通过调用 getWindow().setSharedElementsUseOverlay(false); 来禁用它在开始过渡之前。这应该告诉 Android 在动画期间使用原始 View 层次结构

关于android - 在动画期间保持 View 在顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28356640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com