Maybe this is what you looking for:
This assumes that, as you said, your code works fine for mdpi, hdpi and xhdpi and returns xhdpi width when greater than xhdpi.
float width;
BitmapFactory.Options dimensions = new BitmapFactory.Options();
dimensions.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.ic_marker_void, dimensions);
float densityFactor = this.getResources().getDisplayMetrics().density;
if(densityFactor > 2) // 2 -> xhdpi
width = dimensions.outWidth / 2 * densityFactor;
else
width = dimensions.outWidth;