Android 如何在使用ObjectAnimator时沿x轴移动按钮
当我点击一个按钮(button1)时,我想将其移动到x轴上 这是我的密码:Android 如何在使用ObjectAnimator时沿x轴移动按钮,android,android-studio,Android,Android Studio,当我点击一个按钮(button1)时,我想将其移动到x轴上 这是我的密码: btn=(Button)findViewById(R.id.button1); currentX=btn.getX(); currentY=btn.getY(); moveX=ObjectAnimator.ofFloat(btn,"translationX",currentX,currentX+10); moveY=ObjectAnimator.ofFloat(btn,"trans
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。我错过了什么?我不认为在动画之后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();
}
});
我不认为在动画之后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();
}
});
您需要创建一个新的动画师,或者需要更新
moveX
和moveY
动画的值。(实际上,您不需要moveY
动画,因为您没有更改Y位置。)
此外,使用.animate()
获取ViewPropertyAnimator
,视图具有更高性能的动画功能。我将以这种方式重构您的代码:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn.animate().xBy(10).start()
}
});
如果以后您决定也要设置Y位置的动画,您可以在
.start()
之前简单地添加.yBy(值)
,您需要创建一个新的动画制作者,或者需要更新moveX
和moveY
动画的值。(实际上,您不需要moveY
动画,因为您没有更改Y位置。)
此外,使用.animate()
获取ViewPropertyAnimator
,视图具有更高性能的动画功能。我将以这种方式重构您的代码:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn.animate().xBy(10).start()
}
});
如果以后您决定也要设置Y位置的动画,您可以简单地在
.start()
之前添加.yBy(value)
,这是因为在再次单击按钮将其设置为初始值后,您没有保持按钮移动到的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();
}
});
这是因为在单击按钮后,您没有保持按钮移动到的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();
}
});