如何在使用ObjectAnimator时沿x轴移动按钮

时间:2016-12-17 18:47:50

标签: android android-studio

当我点击它按下x轴时,我想移动一个按钮(button1)。

这是我的代码:

    btn=(Button)findViewById(R.id.button1);
    currentX=btn.getX();
    currentY=btn.getY();
    moveX=ObjectAnimator.ofFloat(btn,"translationX",currentX,currentX+10);
    moveY=ObjectAnimator.ofFloat(btn,"translationY",currentY,currentY);
    set=new AnimatorSet();
    set.playTogether(moveX,moveY);

    btn.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v){
            set.start();
            currentX=v.getX();
            currentY=v.getY();
        }
    });

它在第一次点击时移动,但之后它只是从头开始,而不是在x轴上进一步移动10dp。我错过了什么?

3 个答案:

答案 0 :(得分:2)

您需要创建新的动画师,或者需要更新moveXmoveY动画的值。 (实际上,由于您没有更改Y位置,因此不需要moveY动画。)

此外,使用.animate()获取ViewPropertyAnimator时,视图具有更高性能的动画功能。我会这样重构你的代码:

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        btn.animate().xBy(10).start()
    }
});

如果稍后您决定要为Y位置设置动画,则可以在.yBy(value)之前简单地添加.start()

答案 1 :(得分:0)

我不认为动画后v.getx会改变

试试这个:

int multi =1;
btn=(Button)findViewById(R.id.button1);
currentX=btn.getX();
currentY=btn.getY();
moveX=ObjectAnimator.ofFloat(btn,"translationX",currentX+10*(multi-1),currentX+10*multi);
moveY=ObjectAnimator.ofFloat(btn,"translationY",currentY,currentY);
set=new AnimatorSet();
set.playTogether(moveX,moveY);

btn.setOnClickListener(new View.OnClickListener()
{
    public void onClick(View v){
        set.start();
        multi++;
        currentY=v.getY();
    }
});

答案 2 :(得分:0)

这是因为您没有按住按钮移动到的x轴位置,单击后再次将其设置为初始值。

更改这些行

使用静态变量。

static int x_axis=10+btn.getX();


currentX=x_axis;
currentY=btn.getY();
moveX=ObjectAnimator.ofFloat(btn,"translationX",currentX,currentX);
moveY=ObjectAnimator.ofFloat(btn,"translationY",currentY,currentY);
set=new AnimatorSet();
set.playTogether(moveX,moveY);

btn.setOnClickListener(new View.OnClickListener()
{
    public void onClick(View v){
        set.start();
        x_axis=x_axis+10;
        currentY=v.getY();
    }
});