getWidth在缩放后不返回不同的值

我正在尝试使用setScaleX找到我所缺少的内容。

final ImageView iv = (ImageView) findViewById(R.id.imageView); ViewTreeObserver vto = iv.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // Start at 60 Log.d("test", "Before"+String.valueOf(iv.getWidth())); iv.setScaleX((float) .5); // Still at 60 after scale Log.d("test", "After"+String.valueOf(iv.getWidth())); } }); 

我想宽度会变成30.如何在缩放后获得宽度值?

你可以通过乘以scale x or y来解决它

  final ImageView iv = (ImageView) findViewById(R.id.imageView); ViewTreeObserver vto = iv.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // Start at 60 Log.d("test", "Before"+String.valueOf(iv.getWidth()* iv.getScaleX())); iv.setScaleX((float) .5); // Still at 60 after scale Log.d("test", "After"+String.valueOf(iv.getWidth()* iv.getScaleX())); } }); 

getWidth()返回变换应用于视图之前的宽度( setScaleX等)。 所以这是预期的。 getDrawingRect的文档暗示了这一点 :

  These bounds do not account for any transformation properties currently set on the view, such as setScaleX(float) or setRotation(float).