0

我已经使用 ObjectAnimator 将 Rotate 动画应用于按钮,而旋转似乎可以工作;枢轴点仍然是按钮的左上角。

主要活动

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

}
4

2 回答 2

0

bt1.getWidth()的,无法得到结果,但 0 in onCreate,因为bt1尚未测量。您可以尝试以下操作:

button.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
  @Override
  public void onGlobalLayout(){
    //here you can get size
    width = button.getWidth();
    height = button.getHeight();
  }
});
于 2015-02-04T16:29:33.267 回答
-2

OnCreate 中的 getX() 总是给你一个零 - 它没有在视图中“实现”

你必须等待它。我使用这个循环来等待绝对非零值:

    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();
于 2014-08-31T17:29:36.723 回答