【发布时间】:2017-07-25 12:55:45
【问题描述】:
查看示例。我有两个场景,分别是开始和结束场景。 开始场景布局:
<?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 应用了滑动过渡,cardView 和 container 改变了它的边界,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>
带有过渡的片段代码:
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_start_transition:
<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>
结果动画:
我想将 btn1 滑到cardView 和container 下。如您所见,cardView 位于根布局的末尾以结束按钮。但在结果动画中,它会滑过cardView。我可以以某种方式控制动画视图之间的这种 z 轴关系吗?
试过cardView.bringToFront() - 它没有帮助
肯定应该有简单的解决方案,但我找不到。
我需要你们的帮助,伙计们。
更新:
这是因为framework在scene container view overlay上绘制了slide transition,看android.transition.Visibilityclass:
sceneRoot.getOverlay().add(overlayView);
但问题仍然存在。
【问题讨论】:
-
将此添加到您的卡片视图并尝试 android:elevation="10dp"
-
@Anil 不那么容易(它也不能像
translationZ操作那样工作 -
你有没有想过这个问题。我正在经历类似的事情。
-
我也有同样的问题。正如@Beloo 所指出的那样,由于
android.transition.Visibility类将滑动视图添加到叠加层中,因此如果不编写自定义android.transition.Transition子类,这似乎是不可能的。我可以尝试一下,如果我成功了,我会分享。
标签: android animation android-transitions