2016-12-17 33 views
0

ボタンをクリックしたときにボタン(ボタン1)を移動したいときは、x軸をスローします。ObjectAnimatorの使用中に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,"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

私はv.getxアニメ

後に変更はないと思う、この試してください:あなたは新しいアニメーターを作成するいずれかの必要があるか、moveXの値を更新する必要が

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

をアニメーションはmoveYです。

を使用したビューでは、よりパフォーマンスの高いアニメーション機能が使用され、ViewPropertyAnimatorを取得しています(実際には、Y位置を変更していないので、moveYアニメーションは不要です)。後で、あなたはまた、Y位置をアニメーション化することを決定した場合、あなたは簡単な.start().yBy(value)を追加することができます

btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     btn.animate().xBy(10).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(); 
    } 
}); 
関連する問題