Personalizable con ImageView

Ya tengo un 'ImageView' con estos parámetros:

android:layout_width="wrap_content" android:layout_height="wrap_content" 

Y fijar personalizado Drawable :

 public class HexDrawable extends Drawable { private Path hexagonPath; private float mWidth, mHeight; private int mBackgroundColor; private int mStrokeColor; private int mStrokeWidth; public HexDrawable(){ init(); } public void setBackgroundColor(int color) { mBackgroundColor = color; } public void setStrokeWidth(int width) { mStrokeWidth = width; } public void setStrokeColor(int color) { mStrokeColor = color; } @Override public int getIntrinsicHeight() { return 60; } @Override public int getIntrinsicWidth() { return 60; } private void init() { hexagonPath = new Path(); mBackgroundColor = Color.BLUE; mStrokeColor = Color.GREEN; mStrokeWidth = 4; } private void calculatePath() { float p = mStrokeWidth / 2; float w = mWidth - 2 * p; float h = mHeight - 2 * p; float r = h / 2; float a = (float) (r / Math.sqrt(3)); PointF X = new PointF(p + a + r / 2, p); PointF Y = new PointF(p + a + r , p); PointF A = new PointF(p + a, p + 0f); PointF B = new PointF(p + 0f, p + r); PointF C = new PointF(p + a, p + 2 * r); PointF D = new PointF(p + w - a, p + 2 * r); PointF E = new PointF(p + w, p + r); PointF F = new PointF(p + w - a, p + 0); hexagonPath.moveTo(Yx, Yy); hexagonPath.lineTo(Ax, Ay); hexagonPath.lineTo(Bx, By); hexagonPath.lineTo(Cx, Cy); hexagonPath.lineTo(Dx, Dy); hexagonPath.lineTo(Ex, Ey); hexagonPath.lineTo(Fx, Fy); hexagonPath.lineTo(Xx, Xy); } @Override protected void onBoundsChange(Rect bounds) { mWidth = bounds.width(); mHeight = bounds.height(); calculatePath(); } @Override public void draw(Canvas canvas) { Paint paint = new Paint(); paint.setColor(mStrokeColor); // set the color paint.setStrokeWidth(mStrokeWidth); // set the size paint.setDither(true); // set the dither to true paint.setStyle(Paint.Style.STROKE); // set to STOKE paint.setStrokeJoin(Paint.Join.ROUND); // set the join to round you want paint.setStrokeCap(Paint.Cap.ROUND); // set the paint cap to round too paint.setPathEffect(new CornerPathEffect(mStrokeWidth)); // set the path effect when they join. paint.setAntiAlias(true); canvas.drawPath(hexagonPath, paint); canvas.clipPath(hexagonPath, Region.Op.INTERSECT); canvas.drawColor(mBackgroundColor); canvas.drawPath(hexagonPath, paint); canvas.save(); } @Override public void setAlpha(int alpha) { } @Override public void setColorFilter(ColorFilter colorFilter) { } @Override public int getOpacity() { return 0; } } 

Parece que ImageView utiliza todo el ancho en este caso.

¿Cómo implementar Drawable correctamente para usarlo con ImageView ?

La raíz del problema era el modo de clip.

Es mejor usar canvas.clipPath(hexagonPath, Region.Op.REPLACE);

También, el ejemplo de la pregunta trabaja bien con ImageView, pero después de la investigación profunda que undestand, eso en android 5.0 y arriba este drawable se utiliza en TextView en TextView . También su no necesidad de anular getIntrinsicHeight

Su código es absolutamente correcto:

Introduzca aquí la descripción de la imagen

Así es como lleno ImageView (en onCreate() de la actividad):

 ((ImageView)findViewById(R.id.hexImageView)).setImageDrawable(new HexDrawable()); 

Disposición de la Activity en la captura de pantalla:

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp"> <ImageView android:id="@+id/hexImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </FrameLayout> 

Si reemplazo wrap_content con valor, hexágono como se espera está cambiando su tamaño.

Probado en Android 6.0 y 4.3.

Sólo un consejo – en lugar de los valores codificados en getIntrinsicHeight() y getIntrinsicWidth() , podría ser mejor utilizar dimens en dimens lugar.

  • Enviar una imagen de Android a un servicio Web ASP.NET
  • Redimensionar la imagen a todo el ancho y la altura fija con Picasso
  • Procesamiento de imágenes con Android Camera
  • Cómo almacenar (imagen de mapa de bits) y recuperar la imagen de la base de datos sqlite en android?
  • Cuadros de bits en escala de grises en android
  • Cómo obtener color en el punto (o píxel) de una imagen en evento táctil en android
  • Personalizar la imagen referida De Html cadena
  • Necesito establecer la ruta para guardar las imágenes con una aplicación para Android e IOS con UNITY
  • Evite onMeasure y onLayout cada vez que ImageView Bitmap se establece
  • Tratando de guardar la imagen en una carpeta de imágenes determinada que no se ha creado
  • ¿Cómo hacer deslizar la pantalla como picasso?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.