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).