1

我是动画新手。我在按钮上有一个旋转动画。问题是当执行该按钮动画时,该按钮与布局中的其他按钮相交。因此,在动画期间,无法看到移动按钮,因为它被其他按钮覆盖。关于如何让我的动画停留在布局顶层的任何想法?我想找出一个与 API 8 兼容的解决方案。

//create shake animation
    final Animation shakeIt = AnimationUtils.loadAnimation(this, R.anim.shake);
    findViewById(R.id.button_spin).startAnimation(shakeIt);


// use shake animation
    spinnerButton.startAnimation(shakeIt);

编辑:(这里有更多信息)

所以我在过去的几个小时里一直在玩它,并发现了更多的东西。Lecho 的直觉是正确的,z 顺序是一个小部件是“高于”还是“低于”另一个的驱动因素。我面临的问题可能是因为两件事:

  1. 视图视图前面的按钮(我想将其移回)具有在活动结束附近编辑的文本。添加文本是否会强制小部件重绘更改该视图的 Z 顺序???

  2. onResume() 中的按钮文本已更改,似乎我无法在该方法中更改按钮的 Z 顺序???

以上2个问题的答案将解决我的问题

编辑 2:有问题的 XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/bg"
    android:orientation="vertical"
     >

     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:orientation="vertical"
       android:layout_weight=".7"
       android:layout_marginTop="5dp" >

         <Button
            android:id="@+id/categoryButton"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/drop"
            android:prompt="@string/planet_prompt"
            android:paddingRight="20dp"
            android:textColor="#000000"
            android:textStyle="bold"
            android:textSize="35dp"
            />


     </LinearLayout>


 <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="0dp"
     android:layout_weight="0.1"
     android:orientation="horizontal" >

     </LinearLayout>

   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:orientation="horizontal"
       android:layout_weight="1.5" >

               <LinearLayout
               android:layout_width="0dp"
               android:layout_height="match_parent"
               android:orientation="horizontal"
               android:layout_weight="1" >
               </LinearLayout>

                <Button
                android:id="@+id/button_spin"
                android:layout_width="0dp"
                android:layout_weight="2.35"
                android:layout_height="fill_parent"
                android:background="@drawable/letseat"
                android:layout_gravity="center_horizontal"
                android:gravity="center" />

              <LinearLayout
               android:layout_width="0dp"
               android:layout_height="match_parent"
               android:orientation="horizontal"
               android:layout_weight="1" >
               </LinearLayout>

</LinearLayout>



 <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="0dp"
     android:layout_weight="3"
     android:orientation="vertical">

      <Button
        android:id="@+id/button_additems"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:background="@drawable/add_rest"
        android:gravity="center_horizontal" />   

        <Button
        android:id="@+id/button_showrestaurant"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:background="@drawable/edit_rest"
        android:gravity="center_horizontal" />

        <Button
        android:id="@+id/button_nearbyplaces"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:background="@drawable/whats_near"
        android:gravity="center_horizontal" />

  </LinearLayout>
</LinearLayout>
4

1 回答 1

0

只是我的想法。在 android 中,z-order 由视图添加到 XML 的顺序决定。也许动画按钮是在另一个按钮之前添加到 xml 中的,因此它“更深”。稍后尝试在 XML 中放置动画按钮,或者bringChildToFront(buttonView)在布局上使用方法,或者从代码中将按钮添加到布局中。

编辑:

广告 1. 添加文本似乎不会改变 Z 顺序。当我更改文本并调用button.bringToFront()时,Z 顺序会更改,但在我调用bringToFront()setText()单独调用时不会更改。

广告 2.onResume添加文本不会更改 Z 顺序,但方法bringToFront()似乎按预期工作。

我现在无法将这些方法与视图动画一起测试。

测试活动:

public class MainActivity extends Activity {
    private int i = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button btn1 = (Button) findViewById(R.id.btn1);
        final Button btn2 = (Button) findViewById(R.id.btn2);
        btn2.bringToFront();
        final Button btn3 = (Button) findViewById(R.id.btn3);
        btn3.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if ((i % 2) == 0) {
                    final Button btn1 = (Button) findViewById(R.id.btn1);
                    btn1.setText("BUTTON_BLACK_NEW");
                    btn1.bringToFront();
                } else {
                    final Button btn2 = (Button) findViewById(R.id.btn2);
                    btn2.setText("BUTTON_GREY_NEW");
                    btn2.bringToFront();
                }
                ++i;

            }
        });

    }

    @Override
    protected void onResume() {
        super.onResume();
        if ((i % 2) == 0) {
            final Button btn1 = (Button) findViewById(R.id.btn1);
            btn1.bringToFront();
        } else {
            final Button btn2 = (Button) findViewById(R.id.btn2);
            btn2.bringToFront();
        }
        ++i;
    }

}

布局:

<RelativeLayout 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:context=".MainActivity" 
android:id="@+id/main_layout">

<Button
    android:id="@+id/btn1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/black"
    android:text="BUTTON_BLACK"
    android:textColor="@android:color/white" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/darker_gray"
        android:text="BUTTON_GREY"
        android:textColor="@android:color/black" />

    <Button
        android:id="@+id/btn3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CHANGE_Z"
        android:layout_below="@+id/btn2" />

</RelativeLayout>
于 2012-12-04T19:32:48.293 回答