2015-08-08 110 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

对不起,我误解了你的问题,尝试新的。 –