在對View進行屬性變化時候:
ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "scaleX", 2);
- 對視圖進行放大或者縮小,
view.getWidth()始終不變,變換后的實際寬度為view.getWidth()*view.getScaleX()。 -
view.getLeft(),view.getTop(),view.getRight(),view.getBottom()取得值如下,并且它們的值不會因為平移或者縮放等操作而變化。
653161-20171123143730727-229301910.png
-
view.getX()以及view.getY()的值不會隨著視圖的放大或者縮小而改變。
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "scaleX", 2);
AnimatorSet set = new AnimatorSet();
set.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
Log.i("hhhd", "onAnimationStart: view.getX(): "+view.getX() +" view.getWidth(): "+view.getWidth()+ " v.getTranslationX():"+view.getTranslationX());
}
@Override
public void onAnimationEnd(Animator animation) {
Log.i("hhhd", "onAnimationStart: view.getX(): "+view.getX() +" view.getWidth(): "+view.getWidth()+ " v.getTranslationX():"+view.getTranslationX()) ;
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
set.play(animator1);
set.setDuration(2000);
set.start();
}
});
結(jié)果為
hhhd: onAnimationStart: view.getX(): 260.0 view.getWidth(): 200 v.getTranslationX():0.0
hhhd: onAnimationStart: view.getX(): 260.0 view.getWidth(): 200 v.getTranslationX():0.0
- 如果同時對視圖進行縮放并且平移。
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "scaleX", 2);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(view, "translationX",view.getTranslationX()+100);
AnimatorSet set = new AnimatorSet();
set.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
Log.i("hhhd", "onAnimationStart: view.getX(): "+view.getX() +" view.getWidth(): "+view.getWidth()+ " v.getTranslationX():"+view.getTranslationX());
}
@Override
public void onAnimationEnd(Animator animation) {
Log.i("hhhd", "onAnimationStart: view.getX(): "+view.getX() +" view.getWidth(): "+view.getWidth()+ " v.getTranslationX():"+view.getTranslationX()) ;
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
set.play(animator1).with(animator2);
set.setDuration(2000);
set.start();
}
});
結(jié)果如下:
hhhd: onAnimationStart: view.getX(): 260.0 view.getWidth(): 200 v.getTranslationX():0.0
hhhd: onAnimationStart: view.getX(): 360.0 view.getWidth(): 200 v.getTranslationX():100.0
結(jié)果可以知道,只有平移才可以改變View.getX()或者View.getY()的值,視圖的放大縮小無法影響任何坐標(biāo)值。
如果此時需要獲取到視圖縮放之后的值:
view.getWidth() * view.getScaleX()
如果此時需要獲取放大之后的視圖的左邊實際X坐標(biāo):
view.getX() - (view.getWidth() * view.getScaleX() - view.getWidth())
