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
- Android: Establecer márgenes en un FrameLayout mediante programación, no funciona
- Disposición de Android: ancho de la mitad del padre
- Agregar vista a disposición relativa detrás de una vista existente provoca parpadeo de la pantalla
- Ocultar barra de herramientas en desplazamiento con recyclerview dentro de fragmento
- Estilizar vistas compuestas
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:
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!
- 1x1 Android Widget muestra como widget 2x2 en la pantalla WXGA720
- Biblioteca de diseño de Android - Problemas de relleno / margen de botón de acción flotante
- Toque los Listeners para las vistas de padres y niños
- Problema de diseño de Android con los botones debajo de WebView
- Android Linear Layout peso y teclado suave cuestión
- Implementar zoom en scrollView android
- ViewStub vs View.GONE vs Inflate vs ViewSwitcher
- Android - setVisibility resultados en java.util.ConcurrentModificationException
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?
- La Biblioteca de Soporte de Diseño de Android 24.2.1 hace que BottomSheet se abra al inicio
- Adb reboot cuelga Gennymotion