2015-08-08 106 views
0

問題:鏈接動畫 - 新位置沒有動畫之間持續

移動後效果動畫完成後,TextView的定位回到原來的位置,然後旋轉。

預期的效果:

TextView的向下移動屏幕,然後在它的位置旋轉永遠

XML佈局

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/rootLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:gravity="center_horizontal" 
    tools:context=".ActivityMain"> 

    <TextView 
     android:id="@+id/tv_hello" 
     android:text="@string/hello_world" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textStyle="bold" 
     android:textSize="20sp"/> 

</RelativeLayout> 

move.XML:

<?xml version="1.0" encoding="utf-8"?> 

<set 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillAfter="true" 
    android:interpolator="@android:anim/accelerate_interpolator"> 

    <!-- move down --> 
    <translate 
     android:duration="800" 
     android:fillAfter="true" 
     android:fromYDelta="0%p" 
     android:startOffset="0" 
     android:toYDelta="70%p" /> 

</set> 

rotate.XML:

<?xml version="1.0" encoding="utf-8"?> 

<set 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillBefore="true" 
    android:fillAfter="true" 
    android:interpolator="@android:anim/linear_interpolator"> 

    <!-- infinite rotate --> 
    <rotate 
     android:fromDegrees="0" 
     android:toDegrees="360" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:repeatCount="infinite" 
     android:duration="1200" /> 

</set> 

Java代碼:

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.TextView; 

public class ActivityMain extends AppCompatActivity { 

    private TextView mTextView; 
    private Animation mAnimationMove; 
    private Animation mAnimationRotate; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mTextView = (TextView) findViewById(R.id.tv_hello); 

     mAnimationMove = AnimationUtils.loadAnimation(ActivityMain.this, R.anim.move); 
     mAnimationRotate = AnimationUtils.loadAnimation(ActivityMain.this, R.anim.rotate); 

     mAnimationMove.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 

      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       mTextView.startAnimation(mAnimationRotate); 
      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 

      } 
     }); 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.action_settings) { 

      mTextView.startAnimation(mAnimationMove); 

      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_activity_main, menu); 
     return true; 
    } 
} 

如何才能做到這一點? 令人難以置信的是,看似簡單的事實際上相當困難!

+0

你出兩個動畫到同一個XML /可設定,但有第二動畫有一個開始偏移第一動畫的長度是多少? –

+0

不,這是不可能的,因爲如果我先移動它,然後以相同的XML旋轉,那麼旋轉的關鍵將是*原始*起始位置。這是完全不可取的。 –

回答

0

更改此:

<?xml version="1.0" encoding="utf-8"?> 

<set 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fillAfter="true" 
android:interpolator="@android:anim/accelerate_interpolator"> 

<!-- move down --> 
<translate 
    android:duration="800" 
    android:fillAfter="true" 
    android:fromYDelta="0%p" 
    android:startOffset="0" 
    android:toYDelta="70%p" /> 

</set> 

這個

<?xml version="1.0" encoding="utf-8"?> 

<set 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fillAfter="true" 
android:interpolator="@android:anim/accelerate_interpolator"> 

<!-- move down --> 
<translate 
    android:duration="800" 
    android:fillEnabled="true" 
    android:fromYDelta="0%p" 
    android:startOffset="0" 
    android:toYDelta="70%p" /> 

</set> 
+0

但我希望它先移動然後旋轉 –

+0

對不起,我誤解了你的問題,嘗試新的。 –