2014-09-26 32 views
1

我正在做一些视图的翻译动画。我试着两种方式:通过XML和编程。通过编程获得Y位置百分比

这是我如何定义被XML翻译:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromYDelta="0%" android:toYDelta="-70%" android:duration="1000"/> 
</set> 

这样,它工作得很好,但我意识到,我需要更好的编程方式使用animationListener我可以定义操作来occurr当动画结束时。

这是我如何做到这一点编程:定义fromYDeltatoYDelta值(图像只是移动Y轴)时

slide_up = new TranslateAnimation(valuesContainer.getX(), 
      valuesContainer.getX(), 
      valuesContainer.getY(), 
      valuesContainer.getY() - 70); 
    slide_up.setDuration(1000); 
    slide_up.setAnimationListener(new AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 
      // TODO Auto-generated method stub 
     } 
     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 
     @Override 
     public void onAnimationEnd(Animation animation) { 
      //SOMETHING HAPPENS 
     } 
    }); 

的问题就来了。在xml中,我使用百分比(%)做它,它以我需要的方式工作,但我不知道如何以相同方式但以编程方式设置值。

回答

0

我已经找到了结合这两种方法的解决方案。

我在这样的xml中定义了动画,叫做f.e. slide_up_anim.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromYDelta="0%" android:toYDelta="-70%" android:duration="1000"/> 
</set> 

然后,我设置AnimationListener这个动画是这样的:

slide_up = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_up_anim); 

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

     } 
     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 
     @Override 
     public void onAnimationEnd(Animation animation) { 

     } 
    }); 

这样我可以定义fromYDelta和toYDelta百分比,也听动画事件。