如何将一个视图滑出另一个视图

Tas*_*eni 4 android android-animation

我在左上角有一个带有导航菜单的片段。在活动开始时,我想逐渐从菜单图标中滑出一个视图(我们称之为black_view)。

以下是我希望动画与下图一致的粗略细分:

  1. Activity 作为第一张图像开始,black_view不可见。
  2. black_view逐渐从菜单图标后面滑出长度,直到到达第二个图像的点。

第一个片段 >>> 在此处输入图片说明


我试过的:

我尝试通过使用TranslateAnimation来实现这一点。但是,black_view的整个长度出现在动画开始时,这不是我想要的。我还看到一对夫妇的滑动动画代码片段像这个这个,但他们都遵循TranlateAnimation模型(与整个长度black_view显示瞬间)。

我怎样才能做到这一点?

PS:如果有任何我没有添加的重要细节,请告诉我。

ash*_*rov 5

通过SlideTransition API. 只需使用TransitionManager.beginDelayedTransition方法然后将黑色视图的可见性从 更改GONEVISIBLE

import androidx.appcompat.app.AppCompatActivity;
import androidx.transition.Slide;
import androidx.transition.Transition;
import androidx.transition.TransitionManager;

public class MainActivity extends AppCompatActivity {

    private ViewGroup parent;

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

        parent = findViewById(R.id.parent);
        parent.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                parent.getViewTreeObserver().removeOnPreDrawListener(this);
                animate();
                return true;
            }
        });
    }

    private void animate() {
        View textView = findViewById(R.id.text);

        Transition transition = new Slide(Gravity.LEFT);
        transition.setDuration(2000);
        transition.setStartDelay(1000);
        TransitionManager.beginDelayedTransition(parent, transition);

        textView.setVisibility(View.VISIBLE);
    }
}
Run Code Online (Sandbox Code Playgroud)

活动_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:text="Button" />

    <FrameLayout
        android:id="@+id/parent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/button">

        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#000"
            android:text="hello world"
            android:textColor="#fff"
            android:textSize="22sp"
            android:visibility="gone" />
    </FrameLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

结果:

结果

这里的所有类都来自 androix 包,因此代码向后兼容。