El problema de Android de obtener el ancho y alto de la imagen cargada (la diferencia entre getIntrinsicWidth y getwidth)

Obtenga el tamaño de la imagen: en el desarrollo de Android, dondequiera que se requiera dibujar, la clase Drawable es indispensable.

//方法1 获取宽高
int width1 = imgDetailImage.getDrawable().getBounds().width();
int height1 = imgDetailImage.getDrawable().getBounds().height();
//方法2 获取宽高
float width = imgDetailImage.getDrawable().getIntrinsicWidth();
float height = imgDetailImage.getDrawable().getIntrinsicHeight();

Método 1:

Si queremos obtenerlo directamente en el método onCreat(), encontraremos que el ancho y alto obtenidos por el método 1 son 0. ¿Por qué?

Porque cuando se crea un objeto de vista, Android no conoce su tamaño, por lo que los resultados devueltos por getWidth() y getHeight() son 0. El tamaño real se calcula cuando se calcula el diseño, por lo que encontrará algo interesante, que Es decir, la razón por la que onDraw() puede obtener el largo y el ancho .

    /**
     * @return the rectangle's width. This does not check for a valid rectangle
     * (i.e. left <= right) so the result may be negative.
     * 矩形的宽度。这并不检查有效的矩形(即左 =右)结果可能是负面的
     */
    public final int width() {
        return right - left;
    }

    /**
     * @return the rectangle's height. This does not check for a valid rectangle
     * (i.e. top <= bottom) so the result may be negative.
     * 矩形的高度。这并不检查有效的矩形(即左 =右)结果可能是负面的
     */
    public final int height() {
        return bottom - top;
    }

Método 2:

    /**
     * Return the intrinsic width of the underlying drawable object.  Returns
     * -1 if it has no intrinsic width, such as with a solid color.
     */
    public int getIntrinsicWidth() {
        return -1;
    }

    /**
     * Return the intrinsic height of the underlying drawable object. Returns
     * -1 if it has no intrinsic height, such as with a solid color.
     */
    public int getIntrinsicHeight() {
        return -1;
    }

La altura ocupada por el contenido de la Vista después de medir el contenido en la Vista. La premisa es que debe llamar a medida(0,0);(el valor del parámetro de medida) en el método onLayout() del diseño principal o en onDraw. () de esta Vista. Puede definirlo usted mismo), de lo contrario obtendrá el mismo resultado que getHeight().

A veces el ancho y alto obtenidos mediante este método son diferentes a los reales ¿Qué está pasando?

La prueba encontró que el ppp del dispositivo de prueba es 320. Para mantener el tamaño de la misma vista lo más consistente posible en dispositivos con diferentes ppp, Android recomienda que la unidad de medida sea dip/dp. Entonces supongo que la unidad de los dos métodos anteriores debería ser dp, entonces 807px = 807 * 160/320 = 403.5 = 404dp; 1211px = 1211 * 160/320 = 605.5 = 606dp.

Entonces la comprensión correcta debería ser: las propiedades obtenidas no son inherentes a la imagen, sino valores relacionados con el dispositivo.

Nota: Para obtener un ancho y un alto de 0, se recomienda utilizar el segundo método.

Supongo que te gusta

Origin blog.csdn.net/Android_hv/article/details/81911617
Recomendado
Clasificación