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:
- ¿Cómo aumentar el tamaño de un elemento centrado en un recyvlerview?
- No conseguir el pulgar con géneros - jugador de música universal
- Cómo configurar WebView dentro de un LinearLayout
- TextInputLayout no se muestra cuando se agrega programativamente
- Temas de Android dificultan la implementación de la más simple: personalizado por color de tema
<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?
- Cómo cambiar el estilo progerssbar en SwipeRefreshLayout?
- Cómo cambiar mediante programación la altura de un elemento de lista después de que se haya completado la lista
- ScrollView distrubing ListView dentro de LinearLayout
- Android TableLayout no se desplaza verticalmente
- Problemas de renderización de Android GIF
- Error: No se pudo completar la ejecución de Gradle. Causa: Opción de línea de comandos desconocida '-X'
- Android ActionBar no visible
- CoordinatorLayout + AppBarLayout + NavigationDrawer
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 🙂
- Android – android.view.InflateException con una vista personalizada
- ¿Es posible cambiar el icono de la barra de estado (icono de notificación) dinámicamente?