2014-01-08 64 views
2

我想将视图(以我的例子 - 一个按钮,但实际上并不重要)移动到屏幕的中心。 当我运行没有动画的移动时,它可以工作。然而,我很难决定我应该使用哪些动画来做,因为TranslateAnimation只允许我这样做,但指定了我没有的确切的x,y坐标(用度量值试过,但是计算不起作用,我不想使用这种方法)。如何在Android中使用动画将视图移动到屏幕中心

因此,此代码的工作,而不动画:

RelativeLayout.LayoutParams parms2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
parms2.addRule(RelativeLayout.CENTER_VERTICAL); 
parms2.addRule(RelativeLayout.CENTER_HORIZONTAL); 
_buttonC.setLayoutParams(parms2); 

,当我尝试添加动画,事实并非如此。

ObjectAnimator ani = ObjectAnimator.ofFloat(_buttonC, "Y", 2000); 
ani.setDuration(4000); 
ani.addListener(new AnimatorListenerAdapter() 
{ 
    @Override 
    public void onAnimationStart(Animator animation) { 

     RelativeLayout.LayoutParams parms2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     parms2.addRule(RelativeLayout.CENTER_VERTICAL); 
     parms2.addRule(RelativeLayout.CENTER_HORIZONTAL); 
     _buttonC.setLayoutParams(parms2);    
    } 


    @Override 
    public void onAnimationEnd(Animator animation) 
    { 

    } 
}); 

任何帮助,将不胜感激:)

回答

11

你试过:

_buttonC.animate().translationX(parentCenterX - _buttonC.getWidth()/2).translationY(parentCenterY - _buttonC.getHeight()/2); 

当然,你将不得不计算父中心X和centerY:

float parentCenterX = parent.getX() + parent.getWidth()/2; 
float parentCenterY = parent.getY() + parent.getHeight()/2; 

希望这会有所帮助。

+0

它应该是' translationX(parentCenterX - _buttonC.getWidth()/ 2 - _buttonC.getX())' – user3995789

+0

您救了我.. –

0

我不知道这是不是问题,但请尝试:

ObjectAnimator ani = ObjectAnimator.ofFloat(_buttonC, "translationY", 2000); 
... 
ani.start(); 
+0

onAnimationStart EXISTS .... – dusm

+0

您不必使用ani.start() - 只是用代替将Y – Frame91

+0

translationY是的,我试过了已经,没有工作:( – dusm

0

private void moveSearchViewDown(){ 查看edit_text = findViewById(R.id.edit_text);

DisplayMetrics metrics = this.getResources().getDisplayMetrics(); 
    int mid = metrics.heightPixels/2 - edit_text.getHeight(); 

    ObjectAnimator positionAnimation = ObjectAnimator.ofFloat(edit_text, View.Y, mid); 
    positionAnimation.start(); 
} 
相关问题