2013-03-06 13 views
26

Sto cercando di disegnare ShapeDrawable personalizzato con OvalShape, pieno di bianco e con bordo grigio. Ho creato un disegnabile come questo:Disegno di forma ovale programmaticamente con bordo (raggio dell'angolo) su Android

ShapeDrawable drawable = new ShapeDrawable(new OvalShape()); 
drawable.getPaint().setColor(Color.GRAY); 
drawable.getPaint().setStyle(Style.STROKE); 
drawable.getPaint().setStrokeWidth(getPixels(5)); 
drawable.getPaint().setAntiAlias(true); 

Ma il risultato di tutto questo era: corners problem

enter image description here

L'idea è quella di programmazione per creare una forma come questo, ma con colori diversi:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval"> 
<corners android:radius="10dip"/> 
<stroke android:color="#FF0000" android:width="5dip"/> 
<solid android:color="@android:color/transparent"/> 
</shape> 

Come può essere risolto?

+0

Sta dicendo che il problema è il ritaglio del confine mostrato in quella immagine collegata? –

+0

Sì! Non c'è alcun problema se la larghezza del tratto è 0 (linea sottile) ma non è una soluzione per me. Il metodo getPixels() restituisce i pixel per il dip specificato, a proposito ... ma penso che non sia il problema. – L3K0V

+0

Penso che il problema sia la dimensione del tuo drawable. È necessario ridurre la dimensione sufficiente per adattarsi alla larghezza del bordo. –

risposta

1

questa è una nuova soluzione:

RoundedBitmapDrawable RBD = RoundedBitmapDrawableFactory.create(mContext.getResources(),YourBitmap); 
      RBD.setCornerRadius(20); 
      RBD.setAntiAlias(true); 

      wholeRel.setBackground(RBD); 
42

Ho trovato un modo per aggirare la creazione di nuovi drawable!

Un definito un cerchio con bordo da XML Android come segue:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval"> 
<corners android:radius="10dip"/> 
<stroke android:color="#FF0000" android:width="5dip"/> 
<solid android:color="@android:color/transparent"/> 
</shape> 

Poi, quando un desidera modificare il colore drawable, sto applicando colorfilter. Per esempio se voglio cambiare il colore rosso di drawable al blu faccio questo:

Drawable drawable = context.getResources().getDrawable(R.drawable.name); 
drawable.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP); 

Se vogliamo usare StateListDrawable per la creazione di selettori personalizzati dal codice essere consapevoli - StateListDrawable cancella applicata ai filtri drawable ... applicare filtro su l'intero selettore di selector.setColorFilter... risolve il problema.

+0

Mi sto imbattendo in un problema: non è possibile fare 'LinearLayout.addView (disegnabile, nuovo LinearLayout.LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f));' –

+0

Stai cercando di aggiungere un disegno al layout anziché alla vista ... Crea un pulsante di visualizzazione o immagine dell'immagine quindi imposta disegnabile alla vista prima di aggiungerlo al layout e, naturalmente, aggiungerlo al layout. – L3K0V

+0

Sai come potrei cambiare il colore dello sfondo a livello di programmazione? –

Problemi correlati