1、已知控件大小,想知道他在不同设备上的px值。
使用TypedValue.applyDimension方法。
如果这个控件你知道了大小,但不知道在各个设备上的大小,可以使用TypedValue.applyDimension方法来获取实际大小。getResources().getDisplayMetrics()方法Activity类和View中都有提供,因此可以在Activity和自定义View中都可以使用这个方法。
int ballRadius = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, BALL_RADIUS, getResources().getDisplayMetrics());
applyDimension是android.util.TypedValue类下的一个静态方法,可以看到这个方法的作用就是将value的值换算为dp、sp等对应的px值,因为在实时运行过程中很多方法接受的是px值,而不是xml中的dp值。
public static float applyDimension(int unit, float value,DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX://获得value作为px值对应的px值
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;//获得value作为dp值对应的px值
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;//获得value作为sp值对应的px值
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
2、已经获取到控件的对象。
已经得到了控件的对象的话,可以使用View类带的getHeight和getWidth方法,但是这两个方法在绘制好之前的值会一直是0。
view.getHeight();
view.getWidth();
3、想获取的对象是切图。
如果你想获取的控件大小是一张UI提供的图片在设备上的实际大小,那么可以用以下方法。先把drawable资源放到一个bitmap对象里,然后调用bitmap对象的getHeight和getWidth方法即可得到切图在当前设备里的px值。
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.island_off);
int imgHeight = bitmap.getHeight();
int imgWidth = bitmap.getWidth();