2014-02-28 45 views
0

我已經應用旋轉動畫到使用ObjectAnimator的按鈕,而旋轉似乎工作;樞軸點仍然是按鈕的左上角。設置樞軸旋轉動畫(ObjectAnimator),不工作?

MainActivity

Button bt1; 

float pivotX=0f; 
float pivotY=0f; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    bt1 = (Button) findViewById(R.id.button1); 

    pivotX = bt1.getX() + (float)bt1.getWidth();// 500;// bt1.getHeight() ; 
    pivotY = bt1.getY() + (float)bt1.getHeight();// 500;// bt1.getWidth(); 

    bt1.setPivotX(pivotX); 
    bt1.setPivotY(pivotY); 

    bt1.setOnClickListener(this); 
} 


private void rotate() 
{ 
    ObjectAnimator rotate = ObjectAnimator.ofFloat(bt1, View.ROTATION_X,360); 
    rotate.setDuration(2000); 

    AnimatorSet aSet = new AnimatorSet(); 
    aSet.play(rotate); 
    aSet.start(); 
} 

@Override 
public void onClick(View v) 
{ 
    switch(v.getId()) 
    { 
    case R.id.button1: 
     rotate(); 
     break; 

    } 
} 

編輯: bt1.getX和bt1.getY返回0會更新一次,我知道爲什麼了。

編輯:這似乎也沒有工作。

@Override 
public void onWindowFocusChanged(boolean hasFocus) 
{ 
    // TODO Auto-generated method stub 
    super.onWindowFocusChanged(hasFocus); 
    //Here you can get the size! 

    width = bt1.getWidth(); 
    height = bt1.getHeight(); 

} 
+0

你知道了嗎?和,你想在哪裏樞軸點?如果它是中心的,我認爲你需要做的就是將現有的樞紐值除以2,並且應該居中 – wkhatch

回答

-2

的getX()中OnCreate中總是給你一個零 - 在視圖

,你必須等待它不是「落實」。我用這個循環等待絕對非零值:

new Thread(new Runnable() { 
     public void run() { 
      int count = 0; 
      do { 
       try { 
        Thread.sleep(50); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       Log.d(TAG, "checkin... count="+count); 
       count++; 
      } while (!(playStopButton.getWidth() > 0) && count < 100); 
      runOnUiThread(new Runnable() { 
       public void run() { 
        //here get X, get width etc 
       } 
      }); 
     } 
    }).start(); 
0

bt1.getWidth()不能得到結果,但在onCreate 0,因爲bt1不測量yet.you可以試試下面如下:

button.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout(){ 
    //here you can get size 
    width = button.getWidth(); 
    height = button.getHeight(); 
    } 
});