Custom ImageView bloquea el programa

Estoy haciendo una pequeña aplicación para Android, donde tengo un RelativeLayout, que entre otras cosas contiene una imagen personalizada. En mi código Java tengo esta clase:

package com.example.android.helloactivity; class ArrowImageView extends ImageView { public ArrowImageView(Context context) { super(context); } public void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(10,10,10,null); } } 

Entonces en mi RelativeLayout xml tengo lo siguiente:

 <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="#FFF" xmlns:android="http://schemas.android.com/apk/res/android"> <Button ...... /> <TextView ......./> <com.example.android.helloactivity.ArrowImageView android:id="@+id/hello_activity_bearingarrow" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> 

Cuando ejecuto mi clase principal (no se muestra aquí), entonces mi programa se bloquea. Si omito la referencia xml a ArrowImageView, entonces no se bloquea.

¿Me estoy refiriendo a mi clase personalizada de manera equivocada, o lo que está pasando?

Al extender los widgets de Vista, si va a utilizarlos en diseños XML, también debe anular los constructores que toman el argumento AttributeSet.

Primero no extienda ImageView sino sólo View, a menos que haya algo especial acerca de ImageView que conozca y que desee usar.

En segundo lugar, como dijo Leffel, es necesario establecer un atributo de atributo como este

 public ArrowImageView(Context context, AttributeSet set) { super(context, set); } 

También puede que tenga que dar algún tamaño a la vista personalizada estableciendo witdh y altura a algo como 100dp. No estoy seguro de lo que una vista personalizada puede "envolver" cuando no hay otras vistas dentro.

Gracias por las respuestas. Encontré un error en el método onPaint en sí que todavía hacía que las cosas se estrellaran. Después de implementar sus sugerencias y cambiar el onPaint en:

 public void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setColor(Color.MAGENTA); canvas.drawCircle(10,10,10,paint); } 

Todo funcionó Muchas gracias por su ayuda 🙂

  • Problemas de procesamiento Error al cargar LayoutLib:
  • Cursor no es visible en EditText cuando se agrega dinámicamente la vista
  • ¿Cómo podemos ocultar incluir diseño de forma programática en Android?
  • Dibujable como fondo para CardView
  • Problemas de procesamiento: Android Studio 1.2.1.1 y Gradle 1.2.3
  • Error al inflacionar la clase android.support.design.widget.TabLayout
  • Cómo configurar la fuente para TextView en android?
  • ¿Cómo puedo eliminar mediante programación una regla existente que se definió en XML?
  • Cómo colocar una vista inferior y central de la página android layout?
  • Barra de desplazamiento no mostrada en RecyclerView
  • Android: establece un color de fondo y una imagen de fondo translúcida en la actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.