2016-01-06 22 views
6

Sto provando a creare a livello di codice un ShapeDrawable ma il codice seguente non mostra nulla.Creare ShapeDrawable al livello di programmazione

ImageView image = new ImageView (context); 
image.setLayoutParams (new LayoutParams (200, 200)); 
ShapeDrawable badge = new ShapeDrawable (new OvalShape()); 
badge.setBounds (0, 0, 200, 200); 
badge.getPaint().setColor(Color.RED); 
ImageView image = new ImageView (context); 
image.setImageDrawable (badge); 
addView (image); 

Posso farlo funzionare con xml.

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <size 
     android:width="200px" 
     android:height="200px" /> 
    <solid 
     android:color="#F00" /> 
</shape> 

ImageView image = new ImageView (context); 
image.setLayoutParams (new LayoutParams (200, 200)); 
image.setImageResource (R.drawable.badge); 
addView (image); 

Ma mi piacerebbe crearlo a livello di programmazione. L'xml funziona perfettamente quindi il problema non può essere con ImageView, deve essere nella creazione di ShapeDrawable.

+1

Hai provato a impostare i limiti del layout per la visualizzazione di immagini? Per favore aggiungi le informazioni sul layout in cui aggiungi la visualizzazione di immagini a –

+0

Qual è il punto di questo? Immagine ImageView = nuova ImageView (contesto); per la seconda volta? –

risposta

6

Uso setIntrinsicWidth e setIntrinsicHeight anziché setBounds per impostare la larghezza e l'altezza.

ImageView image = new ImageView (context); 
image.setLayoutParams (new LayoutParams (200, 200)); 
ShapeDrawable badge = new ShapeDrawable (new OvalShape()); 
badge.setIntrinsicWidth (200); 
badge.setIntrinsicHeight (200); 
badge.getPaint().setColor(Color.RED); 
image.setImageDrawable (badge); 
addView (image); 
0

Potrebbe essere necessario creare una classe che estenda ShapeDrawable per sovrascrivere onDraw e quindi creare un'istanza della classe.

Esempio: (Source - controllare collegamento per esempio completo)

private static class MyShapeDrawable extends ShapeDrawable { 
      private Paint mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG); 

      public MyShapeDrawable(Shape s) { 
       super(s); 
       mStrokePaint.setStyle(Paint.Style.STROKE); 
      } 

      public Paint getStrokePaint() { 
       return mStrokePaint; 
      } 

      @Override protected void onDraw(Shape s, Canvas c, Paint p) { 
       s.draw(c, p); 
       s.draw(c, mStrokePaint); 
      } 
     } 
Problemi correlati