我使用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 :(得分:0)
是bt1.getWidth()
无法获得结果,但onCreate
中的结果为0,因为bt1
尚未衡量。您可以尝试按照以下方式进行操作:
button.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout(){
//here you can get size
width = button.getWidth();
height = button.getHeight();
}
});
答案 1 :(得分:-2)
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();