当前位置: 首页 > 知识库问答 >
问题:

Android未对相对布局进行动画化

尚景焕
2023-03-14

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

  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>

共有1个答案

云令
2023-03-14

您可以尝试在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);

    }
 类似资料:
  • 本文向大家介绍Android RelativeLayout 相对布局,包括了Android RelativeLayout 相对布局的使用技巧和注意事项,需要的朋友参考一下 示例 RelativeLayout是一个ViewGroup以相对位置显示子视图的。默认情况下,所有子视图都绘制在布局的左上角,因此您必须使用中提供的各种布局属性来定义每个视图的位置RelativeLayout.LayoutPar

  • 在上一节中我们讲到了 LinearLayout,这也是大家学到的第一个布局方式。它支持将多个 View 通过线性的方式(水平或垂直)组合起来,其中最实用的就是 weight 属性,用好 weight 可以让你的线性布局更灵活美观。 然而,在上一节的例子中我们发现,如果需要在多个方向上进行布局,就要嵌套多个 LinearLayout,可以想象如果我们的 UI 足够复杂,那么从工作量和性能上都将是一场

  • 另外一个使用相对布局的方式是对节点使用origin和offset属性来指定相对另外一个节点的位置。 [ Left ] -> [ Right ] { origin: Left; offset: 2,1; } +------+ | Left | +------+ | | +-------+ +------------> | Right |

  • ![我已经以线性布局(下面给出的代码)对其进行了编码,但想知道如何使用相对布局进行相同的操作,或者这只是一个考虑到布局的坏主意? 线性布局 - ][1] 使用相对布局时,我的ImageView不会显示在屏幕上:

  • 本文向大家介绍相对布局和绝对布局,position:relative和obsolute。相关面试题,主要包含被问及相对布局和绝对布局,position:relative和obsolute。时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 相对定位relative: 如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。

  • 我一直使用两个布局文件使用constraintlayout动画 然而,在布局中,我只更改了两个约束。我决定尝试以编程方式这样做,并且这样做了,这起作用了。 然而,这不是动画。我试着像之前在第一个中那样进行动画(这次只使用了一个布局文件),结果是这样的 这与第二个一样工作,但没有显示动画,新的约束立即跳入适当的位置。有没有什么方法可以让动画工作不使用两个layoyuts?还是我做错了什么?多谢了。