1

我有一个使用 View Property Animation 切换两个按钮位置的测试代码。代码如下:

public class TestAnimationActivity extends Activity {
  private View mainView;     
  private View TempView;
  private Button B1, B2, B3;
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Inflate your view
    setContentView(R.layout.main_test);

    mainView = findViewById(R.id.mainTest);
    B1 = (Button) mainView.findViewById(R.id.B1);
    B2 = (Button) mainView.findViewById(R.id.B2);
    B3 = (Button) mainView.findViewById(R.id.B3);              

    OnClickListener OCL = new OnClickListener(){
        @Override
        public void onClick(View v) {               

            if(TempView == null){
                TempView = v;
            }else{

                int originalPos1[] = new int[2];
                TempView.getLocationOnScreen( originalPos1 );

                int originalPos2[] = new int[2];
                v.getLocationOnScreen( originalPos2 );


                v.animate().translationX((float)originalPos1[0] - (float)originalPos2[0]);
                v.animate().translationY((float)originalPos1[1] - (float)originalPos2[1]);

                TempView.animate().translationX((float)originalPos2[0] - (float)originalPos1[0]);
                TempView.animate().translationY((float)originalPos2[1] - (float)originalPos1[1]);

                TempView = null;                                                                                
            }                           
        }};     

    B1.setOnClickListener(OCL);
    B2.setOnClickListener(OCL);
    B3.setOnClickListener(OCL);

  } 
}

XML文件如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainTest"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
    android:id="@+id/B1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#B4B4B4"
    android:gravity="center" />

<Button
    android:id="@+id/B2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#470047"
    android:gravity="center" />

<Button
    android:id="@+id/B3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#000000"
    android:gravity="center" />

</LinearLayout>

当我在手机上测试这段代码时。动画无法正常工作。

两个按钮第一次会切换位置,但是如果我继续单击它们,按钮会转到错误的位置。似乎该按钮仍会根据应用程序启动时的原始位置计算应移动到的位置。

有谁知道出了什么问题?

4

0 回答 0