Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo obtener las dimensiones de un Drawable en un ImageView?

¿Cuál es la mejor manera de recuperar las dimensiones del Drawable en un ImageView?

Mi ImageView tiene un método Init donde crear el ImageView:

  • Cómo eliminar la aplicación de los listados de aplicaciones en la Consola para programadores de Android
  • Animar el cambio de color de fondo de la vista en Android
  • ¿Existe un Util para convertir US State Name a State Code. p.ej. Arizona a AZ?
  • Dibujar el camino con el agujero (android)
  • Google play advierte sobre permiso añadido 'android.permission.READ_CALL_LOG'
  • Uso de CardView y RecyclerView en mis archivos de diseño genera una excepción
  • private void init() { coverImg = new ImageView(context); coverImg.setScaleType(ScaleType.FIT_START); coverImg.setImageDrawable(getResources().getDrawable(R.drawable.store_blind_cover)); addView(coverImg); } 

    En algún momento durante el proceso de layout oder measure necesito las dimensiones exactas de Drawable para ajustar el resto de mis componentes a su alrededor.

    coverImg.getHeight() y coverImg.getMeasuredHeight() no devuelven los resultados que necesito y si utilizo coverImg.getDrawable().getBounds() obtengo las dimensiones antes de que fuera escalada por ImageView.

    ¡Gracias por tu ayuda!

  • Archivo de Android.mk - incluye todos los archivos de origen en diferentes carpetas y subcarpetas
  • SQLITE - eliminar filas con join interno?
  • ¿Reactivar / recrear programáticamente una actividad?
  • InvocationTargetException sobre inflar un xml - android
  • Compra de Android en la aplicación: RESULT_ITEM_UNAVAILABLE
  • Cómo deshabilitar BottomNavigationView modo de cambio?
  • 5 Solutions collect form web for “Cómo obtener las dimensiones de un Drawable en un ImageView?”

    Acabo de probar esto y funciona para mí:

     int finalHeight, finalWidth; final ImageView iv = (ImageView)findViewById(R.id.scaled_image); final TextView tv = (TextView)findViewById(R.id.size_label); ViewTreeObserver vto = iv.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { // Remove after the first run so it doesn't fire forever iv.getViewTreeObserver().removeOnPreDrawListener(this); finalHeight = iv.getMeasuredHeight(); finalWidth = iv.getMeasuredWidth(); tv.setText("Height: " + finalHeight + " Width: " + finalWidth); return true; } }); 

    El ViewTreeObserver le permitirá monitorear el diseño justo antes de dibujarlo (es decir, ya se ha medido todo) y desde aquí puede obtener las medidas escaladas de ImageView .

    Llame getIntrinsicHeight y getIntrinsicWidth en el drawable.

     public int getIntrinsicHeight () 

    Desde: API Nivel 1

    Devuelve la altura intrínseca del objeto dibujable subyacente. Devuelve -1 si no tiene altura intrínseca, como con un color sólido.

     public int getIntrinsicWidth () 

    Desde: API Nivel 1

    Devuelve el ancho intrínseco del objeto dibujable subyacente.

    Devuelve -1 si no tiene anchura intrínseca, como con un color sólido.

    http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight ()

    Este es el tamaño del dibujable original. Creo que esto es lo que quieres.

    La manera más confiable y poderosa de obtener dimensiones extraíbles para mí ha sido usar BitmapFactory para decodificar un mapa de bits. Es muy flexible: puede decodificar imágenes de un recurso extraíble, archivo u otras fuentes diferentes.

    A continuación se muestra cómo obtener las dimensiones de un recurso dibujable con BitmapFactory:

     BitmapFactory.Options o = new BitmapFactory.Options(); o.inTargetDensity = DisplayMetrics.DENSITY_DEFAULT; Bitmap bmp = BitmapFactory.decodeResource(activity.getResources(), R.drawable.sample_image, o); int w = bmp.getWidth(); int h = bmp.getHeight(); 

    Tenga cuidado si utiliza carpetas con varias densidades en res y asegúrese de especificar inTargetDensity en su BitmapFactory.Options para obtener la densidad deseada.

    Esto resolvió mi problema. Descodifica el tamaño del límite de la imagen sin realmente cargar toda la imagen.

     BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.img , o); int w = o.outWidth; int h = o.outHeight; 

    Manera eficiente de obtener Anchura y altura de Drawable :

     Drawable drawable = getResources().getDrawable(R.drawable.ic_home); int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); Log.i("Drawable dimension : WH", width+"-"+height); 

    Espero que esto te ayudará.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.