当我点击它按下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。我错过了什么?
答案 0 :(得分:2)
您需要创建新的动画师,或者需要更新moveX
和moveY
动画的值。 (实际上,由于您没有更改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();
}
});