2016-12-17 19 views
0

Я хочу переместить кнопку (button1), когда я нажимаю на нее, бросает ось x.Как перемещать кнопку вдоль оси X при использовании ObjectAnimator

Вот мой код:

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

Он перемещается при первом щелчке, но после того, что он только начинает с самого начала, вместо того, чтобы двигаться 10dp дальше по оси х. что мне не хватает?

ответ

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

Вам нужно либо создать новый аниматора или вам необходимо обновить значения из moveX и moveY анимации. (На самом деле, вам не нужна анимация moveY, так как вы не меняете позицию Y.)

Кроме того, виды имеют более эффективную анимацию, используя .animate() для приобретения ViewPropertyAnimator. Я бы реорганизовать ваш код таким образом:

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

Если позже вы решите, что вы также хотите анимировать положение Y, вы можете просто добавить .yBy(value) перед .start().

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