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:

  • Añadir google-services.json en el android studio
  • ¿Cómo utilizar la cámara Android en segundo plano?
  • Android NumberPicker: Establecer min, max, por defecto de XML
  • NullPointerException en onCreate () cuando se utiliza findViewById - setContentView se utiliza antes?
  • Configurar android en eclipse pero no sabe el directorio de SDK
  • Obtener id token en la aplicación de Android y verificarlo en el servidor de back-end (¿Cómo usar id token?)
  • 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!

  • ¿Cómo enrutar todo el tráfico procedente del anclaje?
  • Establecer la posición absoluta de una vista
  • OkHttp en android para realizar solicitudes de red
  • Android ADB detener el comando de la aplicación como "fuerza-stop" para dispositivos no arraigados
  • Android Fragment y getWindow ()
  • Mostrar siempre el título del marcador de mapa en Android
  • 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.