gpt4 book ai didi

android - 场景。在 View 下滑动过渡

转载 作者:行者123 更新时间:2023-11-30 00:26:20 24 4
gpt4 key购买 nike

查看示例。我有两个场景,分别是开始和结束场景。起始场景布局:

<?xml version="1.0" encoding="utf-8"?>
<merge
android:id="@+id/vgRoot"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:parentTag="RelativeLayout"
tools:ignore="HardcodedText"
>

<Button
android:id="@+id/btn1"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/cardView"
android:text="Button"
android:layout_centerHorizontal="true"
/>

<Button
android:id="@+id/btnGo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/btn1"
android:text="@string/go"
android:layout_centerHorizontal="true"
/>

<android.support.v7.widget.CardView
android:id="@+id/cardView"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_margin="16dp"
android:translationZ="3dp"
>

<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#3829AB"
android:padding="32dp"
>

<TextView
android:id="@+id/tvText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text Title"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@android:color/white"
/>

</FrameLayout>

</android.support.v7.widget.CardView>

</merge>

我有 btn1 应用了滑动过渡,cardViewcontainer,它们改变了它的边界和 tvText 作为 CardView 的主体。

最后的场景:

<?xml version="1.0" encoding="utf-8"?>
<merge
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:ignore="HardcodedText"
tools:parentTag="RelativeLayout"
>

<android.support.v7.widget.CardView
android:id="@+id/cardView"
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:cardCornerRadius="0dp"
>

<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:background="#3829AB"
android:orientation="vertical"
>

<TextView
android:id="@+id/tvText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text Title"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@android:color/white"
/>

</FrameLayout>

</android.support.v7.widget.CardView>

</merge>

带有过渡的 fragment 代码:

public class FragmentStartTransition extends Fragment {
@BindView(R.id.btnGo) View btnGo;
@BindView(R.id.vgRoot) ViewGroup vgRoot;

private Unbinder unbinder;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
ViewGroup view = (ViewGroup) inflater.inflate(R.layout.fragment_start_transition, container, false);
unbinder = bind(this, view);
return view;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
btnGo.setOnClickListener(btnGo.setOnClickListener(v -> moveNext());
}

@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}

private void moveNext() {
Scene scene = Scene.getSceneForLayout(vgRoot, R.layout.scene_end, getContext());
TransitionManager.go(scene, getTransition());
}

private Transition getTransition() {
Slide slide = new Slide(Gravity.TOP);
slide.addTarget(R.id.btn1);

ChangeBounds changeBounds = new ChangeBounds();
changeBounds.addTarget(R.id.cardView);
changeBounds.addTarget(R.id.container);
changeBounds.addTarget(R.id.tvText);

return new TransitionSet()
.setOrdering(TransitionSet.ORDERING_TOGETHER)
.addTransition(slide)
.addTransition(changeBounds)
.setDuration(1500);
}
}

fragment 开始过渡:

<RelativeLayout
android:id="@+id/vgRoot"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="HardcodedText"
>

<include layout="@layout/scene_start"/>

</RelativeLayout>

结果动画:

enter image description here

我想在 cardViewcontainer 下滑动 btn1。如您所见,cardView 放置在根布局的末尾以位于按钮上方。但在结果动画中,它在 cardView 上滑动。我能以某种方式控制动画 View 之间的这种 z 轴关系吗?

尝试了 cardView.bringToFront() - 它没有帮助

应该有简单的解决方案,但我找不到。
伙计们,我需要你们的帮助。

更新:这是因为framework在场景container view overlay上绘制了slide transition,看android.transition.Visibility类:

 sceneRoot.getOverlay().add(overlayView);

但问题仍然悬而未决。

最佳答案

我刚刚解决了同样的问题。诀窍似乎是不让 Visibility 类将滑动(消失) View 复制到场景根的覆盖层,这显然会显示在场景中任何其他 View 之上。

如果滑动 View 确实从 View 层次结构中移除,它只会被复制到叠加层。如果我将 View 留在场景中,但将其 visibility 设置为 GONE,它会重新使用相同的 View ,而不是将其复制到叠加层。然后,如果它在同级 View 下方,它将滑到同级 View 下方(因此您的 cardView.bringToFront() 应该可以工作)。

关于android - 场景。在 View 下滑动过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45304033/

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