如何使用android中的动画将视图移动到屏幕中心

时间:2014-01-08 07:38:43

标签: android relativelayout android-animation android-view

我想将一个视图(在我的情况下 - 一个按钮,但它并不重要)移动到屏幕的中心。 当我在没有动画的情况下进行移动时,它可以工作。 但是,我很难决定我应该使用哪些动画,因为TranslateAnimation只允许我这样做,但指定了我没有的精确x,y坐标(尝试使用指标,但计算不起作用,我不想使用这种方法)。

因此,此代码无需动画即可运行:

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)
    {

    }
});

任何帮助将不胜感激:)

4 个答案:

答案 0 :(得分:14)

你试过了吗?

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

当然,您必须计算父centerX和centerY:

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

希望这会有所帮助。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

首先。您需要获取屏幕坐标(类 Point)。从 onCreate 启动此方法。

    fun getWindowSize():Point{
    val display = windowManager.defaultDisplay
    val size = Point()
    display.getSize(size)
    val width: Int = size.x
    val height: Int = size.y
    return size
}

第二。您需要:

  1. 计算中心在哪里

  2. 计算要移动的视图的大小并将其除以 2

  3. 从中心减去移动视图大小的一半

  4. 使用 ViewPropertyAnimator 移动视图

     protected fun toCentre(view: View){
     //get centre
     val windowXcentre = size.x / 2
     val windowYcentre = size.y / 2
     //half size of moving view
     val viewWidth = view.width /2
     val viewHeight = view.height/2
     //wher to move
     val x = windowXcentre - viewWidth.toFloat()
     val y = windowYcentre - viewHeight.toFloat()
     //move it
     view.animate().x(x).y((y))
    

    }

答案 3 :(得分:-1)

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();
}