Vista de componentes personalizada de Android con esquinas redondeadas

Estoy intentando crear una visión con las esquinas redondeadas (y un color de fondo de la opción) que puedo reutilizar con diversos colores de fondo; Difícil de explicar, así que aquí está mi código:

/app/src/com/packagename/whatever/CustomDrawableView.java

package com.packagename.whatever; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.drawable.PaintDrawable; import android.util.AttributeSet; import android.view.View; public class CustomDrawableView extends View { private PaintDrawable mDrawable; int radius; private void init(AttributeSet attrs) { TypedArray a = getContext().obtainStyledAttributes(attrs,R.styleable.RoundedRect); radius = a.getInteger(R.styleable.RoundedRect_radius, 0); } public CustomDrawableView(Context context, AttributeSet attrs) { super(context, attrs); init(attrs); mDrawable = new PaintDrawable(); } protected void onDraw(Canvas canvas) { mDrawable.setCornerRadius(radius); mDrawable.draw(canvas); } } 

Aquí está el XML para mostrar el componente personalizado: /app/res/layout/test.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ny="http://schemas.android.com/apk/res/com.packagename.whatever" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" android:padding="10dp"> <com.packagename.whatever.CustomDrawableView android:id="@+id/custom" android:layout_width="200dp" android:layout_height="200dp" android:background="#b80010" ny:radius="50" /> </LinearLayout> 

Estoy queriendo que la caja roja tenga 50px esquinas redondeadas, pero como verás, no:

Caja roja sin esquinas redondeadas

La idea es que podría cambiar fácilmente el color de fondo en el XML y automáticamente tener una bonita vista con esquinas redondeadas, sin tener que crear múltiples drawables.

¡Gracias por la ayuda!

Usted necesita fijar su radio y color de la esquina en el fondo drawable.

Aquí hay una manera que funcionaría. Coge el color que estableces en android: fondo, a continuación, utilizarlo para crear un nuevo dibujable que se establece en el fondo en el constructor. Esto funcionará siempre y cuando solo establezca android: fondo para un valor de color.

  public CustomDrawableView(Context context, AttributeSet attrs) { super(context, attrs); init(attrs); // pull out the background color int color = attrs.getAttributeIntValue("http://schemas.android.com/apk/res/android", "background", 0xffffffff); // create a new background drawable, set the color and radius and set it in place mDrawable = new PaintDrawable(); mDrawable.getPaint().setColor(color); mDrawable.setCornerRadius(radius); setBackgroundDrawable(mDrawable); } 

Si anula onDraw, asegúrese de llamar a super.onDraw (lienzo) primero para obtener el fondo dibujado.

Dado un simple moldeado como este:

 public ShapeDrawable Sd(int s){ float[] outerR = new float[] { 12, 12, 12, 12, 12, 12, 12, 12 }; ShapeDrawable mDrawable = new ShapeDrawable(new RoundRectShape(outerR, null,null)); mDrawable.getPaint().setColor(s); return mDrawable; } 

Puede hacer lo siguiente:

  LinearLayout l=(LinearLayout) findViewById(R.id.testLayout); l.setBackgroundDrawable(Sd(0xff74AC23)); 

Donde los 12 representan el radio. Usted podría aplicar esto a cualquier opinión para un fondo drawable.

Echa un vistazo a esta pregunta: ¿Cómo puedo configurar el radio de esquina redondeada de un color dibujable mediante xml?

Y quizás también estos dos:

¿Cómo agregar la esquina redondeada a un drawable que estoy utilizando como fondo en Android?
¿Cómo debo dar imágenes esquinas redondeadas en Android?

  • ¿Cómo inserto una imagen en una actividad con android studio?
  • Android DrawerLayout falla al usar las gravedades TOP e BOTTOM
  • Detectar si TextView en ListView está ellipsizado
  • Obtener las dimensiones de RelativeLayout
  • Artículo Sticky ScrollView en la parte inferior - Android
  • ¿Utilizar valores decimales para tamaños de píxeles en Android?
  • Android: dither = "true" no dither, lo que está mal?
  • No se puede resolver el símbolo abc_ic_search_api_mtrl_alpha
  • Qué orden de diseños anidados es más eficiente en Android
  • ¿Cómo detengo mi menú desplegable AutoCompleteTextView de desplazarse sobre mi AutoCompleteTextView?
  • ¿Posible hacer un diseño XML de colmena en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.