2014-09-03 99 views
1

我想在android 2.3中執行簡單的翻譯動畫。以下是我對現在Android永久動畫

佈局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/root_test_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:contentDescription="@string/pointer_description" 
     android:src="@drawable/red_dot" /> 

    <RelativeLayout 
     android:id="@+id/testBottomPanel" 
     android:layout_width="320dp" 
     android:layout_height="295dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" > 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_centerInParent="true" 
      android:scaleType="centerCrop" 
      android:src="@drawable/measure_panel" /> 

     <ToggleButton 
      android:id="@+id/startTestSwitch" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:background="@drawable/start_test_check" 
      android:focusable="false" 
      android:focusableInTouchMode="false" 
      android:layout_marginTop="20dp" 
      android:textOff="" 
      android:textOn="" /> 
    </RelativeLayout> 

</RelativeLayout> 

動畫設置:

private void setUpView() { 
      ToggleButton testSwitch = (ToggleButton)findViewById(R.id.startTestSwitch); 
      final RelativeLayout lay = (RelativeLayout)findViewById(R.id.testBottomPanel); 

      final TranslateAnimation anim = new TranslateAnimation(0, 0, 0, 100); 
      anim.setDuration(1000); 
      anim.setFillAfter(true); 
      anim.setAnimationListener(this); 

      testSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        if(isChecked) { 
         lay.startAnimation(anim); 
        } 
        else { 

        } 
       } 
      }); 
     } 

監聽器:

@Override 
public void onAnimationEnd(Animation animation) { 
    final RelativeLayout lay = (RelativeLayout)findViewById(R.id.testBottomPanel); 
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)lay.getLayoutParams(); 
    params.topMargin += 100; 
    lay.setLayoutParams(params); 
} 

我的問題是,當動畫完成所有繪製確定,但我的佈局ToggleButton似乎保持其位置。我的意思是它在初始位置下繪製100px,但是當我點擊它時沒有響應。要點擊它,我需要在動畫之後的地方點擊100px。如何將這個切換按鈕輸入翻譯成動畫之後的位置?

+0

也許你需要在按鈕上調用'invalidate()'來重畫它自己? – 2014-09-03 18:44:21

回答

0

您正在使用視圖動畫,該動畫只會移動到繪製的位置,而不會移動到可以點擊的位置。你可以切換到一個屬性動畫,它會更新實際的位置,因爲它移動的地方(它被繪製的地方和它可以輕敲的位置)。

+0

什麼是「財產動畫」?特別是對於nineoldandroid。 – djdance 2015-06-08 14:24:48

+0

你可以在這裏閱讀它們:http://developer.android.com/guide/topics/graphics/prop-animation.html我不熟悉nineoldandroid,但他們提到支持的頭版上的對象動畫是一個屬性動畫。 – Whitney 2015-06-08 15:12:08

+0

謝謝。發現並嘗試。不幸的是,它(在API 10的nineoldandroid中)不會將相對佈局父視圖中的視圖向左或向右移動。視圖動畫會移動它,但是「虛擬」,如此處所列......所以只有一種方法是在視圖動畫結束時設置參數 – djdance 2015-06-09 21:17:50