首页 > 解决方案 > 如何将子视图独立移动到父视图?

问题描述

我是 Android Studio 的新手,遇到了一个问题。

所以我在布局中包含三个按钮。我想要做的是移动一个按钮,我们称之为button1,当这个按钮被点击时向上移动到位置(x,y)并且整个(没有button1的布局)向下,在屏幕外,button1保持在位置(x,y ),某种按钮推动效果

我使用了 objectAnimator。首先,我将 button1 向上移动,按预期工作,但是当我尝试向下移动整个布局时, button1 会随着整个布局向下移动,这是我不想要的,我希望它保持在位置 (x,y)一会儿,然后向下移动并离开屏幕。是否可以独立使用objectAnimator,所以button1动画不依赖于整个布局

所以这是一个简化的 XML 文件

 <RelativeLayout 
   android:height="600dp"
   android:width="800dp">

   <Button 
   android:id="@+id/button1/>
   <Button 
   android:id="@+id/button2/>
   <Button 
   android:id="@+id/button3/>

</RelativeLayout>

这就是我在java中尝试过的

ObjectAnimator objAnimUp = ObjectAnimator.ofFloat(button1, "y", -600);
ObjectAnimator objAnimDown = ObjectAnimator.ofFloat(button2, "y", 1000);

objAnimUp.setDuration(500);
objAnimDown.setDuration(1000);

objAnimUp.start();
objAnimDown.start();

上面的代码将 button1 向上翻译,然后将整个布局向下翻译,包括 button1(它是布局的一部分)。我不要那个。我希望 button1 保持在新位置并在一段时间后向下移动是否可以暂时从布局中删除 button1 并独立向上移动?

我尝试了“button1.removeParent()”,但这似乎没有什么不同。还有其他解决方案吗?

谢谢您的回答

标签: androidanimationobjectanimator

解决方案


基本上,如果按钮处于相同的父布局中,您将无法移动。您必须再添加一个父布局,该布局将保存您想要动画下来的按钮和其他视图。试试这个,

 <RelativeLayout 
       android:height="match_parent"
       android:width="match_parent">
    <RelativeLayout 
       android:height="600dp"
       android:width="800dp">

       <Button 
       android:id="@+id/button2/>
       <Button 
       android:id="@+id/button3/>

    </RelativeLayout>
    <Button 
       android:id="@+id/button1/>
    </RelativeLayout>

现在应用相同的动画,它将工作外部的按钮是您要向上移动的按钮。


推荐阅读