Android 没有为相对布局设置动画

Android not animating the Relative Layout

我正在创建一个我想要的相对布局应该从上面滑入布局所以这就是我所做的

  1. 使布局不可见
  2. 在oncreate中动画屏幕上方的布局
  3. 在 onWindowsFocusChanged() 中我调用了动画,使布局可见并希望布局滑入屏幕

但是

创建视图时,布局位于正确位置,不会显示来自屏幕顶部的任何滑动效果

public class OverlayActivity extends Activity implements View.OnClickListener {
  RelativeLayout question_box;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_overlay);
// Slide Up the INVISIBLE layout so that I can call it by animation back to its original position

        question_box = findViewById(R.id.question_box);
        question_box.animate().translationY(-question_box.getHeight());


        final Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
      
    }

    public void animateInObjects() {
        question_box.setVisibility(View.VISIBLE);
        question_box.animate().setDuration(1000).translationY(0);
    }

    @Override
    public void onClick(View v) {
//Some Code
    }

    @Override
    protected void onStop() {
        super.onStop();
        finish();
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        animateInObjects();
        super.onWindowFocusChanged(hasFocus);
    }

}

布局


    <RelativeLayout
        android:id="@+id/question_box"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:layout_marginTop="5dp"
        android:layout_below="@+id/ad_view_container"
        android:visibility="invisible">

        <TextView
            android:id="@+id/question"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/questiontext"
            android:paddingStart="20dp"
            android:paddingTop="7dp"
            android:paddingEnd="20dp"
            android:paddingBottom="20dp"
            android:text="@string/sample_question"
            android:textAlignment="center"
            android:textColor="@color/text_quest"
            android:textSize="23sp" />

        <View
            android:id="@+id/center_vertical"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_centerVertical="true" />

        <LinearLayout
            android:id="@+id/cover_opt1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/question"
            android:layout_marginStart="15dp"
            android:layout_marginTop="10dp"
            android:background="@drawable/main_layout">

            <Button
                android:id="@+id/opt1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginVertical="1dp"
                android:layout_marginHorizontal="2dp"
                android:background="@android:color/transparent"
                android:text="@string/sample_number"
                android:textAlignment="center"
                android:textColor="@color/text_quest"
                android:textSize="18sp" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/cover_opt2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/question"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp"
            android:background="@drawable/main_layout">

            <Button
                android:id="@+id/opt2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginVertical="1dp"
                android:layout_marginHorizontal="2dp"
                android:background="@android:color/transparent"
                android:text="@string/sample_number"
                android:textAlignment="center"
                android:textColor="@color/text_quest"
                android:textSize="18sp" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/cover_opt3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/question"
            android:layout_alignParentEnd="true"
            android:layout_marginTop="10dp"
            android:layout_marginEnd="15dp"
            android:background="@drawable/main_layout">

            <Button
                android:id="@+id/opt3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginVertical="1dp"
                android:layout_marginHorizontal="2dp"
                android:background="@android:color/transparent"
                android:text="@string/sample_number"
                android:textAlignment="center"
                android:textColor="@color/text_quest"
                android:textSize="18sp" />
        </LinearLayout>

    </RelativeLayout>

这是activity

的主题
<style name="Theme.Lockscreen" parent="Theme.AppCompat.NoActionBar">
        <item name="android:background">#33000000</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@android:style/Animation</item>
    </style>

好吧,您尝试在 onCreate 方法中为视图设置动画。起初视图还没有绘制,你得到一个 getHeight = 0 。所以你必须等待使用 view.getViewTreeObserver().addOnGlobalLayoutListener 绘制视图才能为其设置动画

您需要在您的 onCreate() 中添加此内容:

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity2);
// Slide Up the INVISIBLE layout so that I can call it by animation back to its original position

        question_box = findViewById(R.id.question_box);

        question_box.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                if (question_box.getHeight() != 0)
                    question_box.animate().translationY(-question_box.getHeight());
            }
        });

        final Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

    }

试试这个作为你的 xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
      android:fromYScale="0"
      android:toYScale="50%"
      android:duration="1000"></scale>
</set>

让它占到你的一半屏幕并分别排列布局