2012-07-04 11 views
5

Voglio limitare lo schema di ripetizione di un insieme di piccoli disegni casuali a una particolare regione. Sto creando un oggetto (CustomView) usando canvas, ho la conoscenza di come ripetere un pattern sul layout usando il codice xml.Come ripetere un motivo nella vista personalizzata fino ai limiti?

<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/patterntwo" 
    android:tileMode="repeat" /> 

questo non funziona per tela.

In sostanza, voglio usare una bitmap come immagine di sfondo per customview e vorrei ripetere la bitmap in entrambe le direzioni X e Y della vista.

un'occhiata a questa immagine

enter image description here

risposta

7

Si prega di provare con questo codice: -

paint = new Paint(Paint.FILTER_BITMAP_FLAG); 
Shader mShader1 = new BitmapShader(bitmap, Shader.TileMode.REPEAT,Shader.TileMode.REPEAT); 
paint.setShader(mShader1); 
+1

Io farò questo codice .. –

+0

funziona grazie, Kumar .... –

+0

puoi aiutarmi con questo http://stackoverflow.com/questions/19264300/bitmap-with-tile-mode-repeat-and-round-corners – Goofy

2

È possibile rendere il componente personalizzato con uno sfondo bitmap ripete:

BitmapDrawable bitmapBg = new BitmapDrawable(BitmapFactory.decodeResource(
      getResources(), R.drawable.repeatbg)); 
bitmapBg.setTileModeX(Shader.TileMode.REPEAT); 
image.setBackgroundDrawable(bitmapBg); 

e si può fare una maschera con l'immagine che si desidera in quel modo triangolo e il tuo bg.

public static Bitmap getMaskedContactImage(Context context, 
     Bitmap contactImageBitmap, int maskToBeApplied) { 
    Bitmap mask = BitmapFactory.decodeResource(context.getResources(), 
      maskToBeApplied); 
    Bitmap output = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), 
      Config.ARGB_8888); 
    final Rect finalRect = new Rect(0, 0, contactImageBitmap.getWidth(), 
      contactImageBitmap.getHeight()); 
    final Rect originRect = new Rect(0, 0, mask.getWidth(), 
      mask.getHeight()); 
    Canvas canvas = new Canvas(output); 

    Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    xferPaint.setColor(Color.BLACK); 

    xferPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); 

    canvas.drawBitmap(contactImageBitmap, finalRect, originRect, null); 
    canvas.drawBitmap(mask, originRect, originRect, xferPaint); 

    contactImageBitmap.recycle(); 
    mask.recycle(); 

    return output; 
} 

Questo utilizzerà una maschera in cui il colore nero è l'immagine finale.

Se non ho frainteso, è possibile ottenere ciò che si sta visualizzando nell'acquisizione.

saluti, Alex

+0

perché im grado di importare Shader, è che richiede qualsiasi file JAR. –

+0

Nessuna esigenza speciale, http://developer.android.com/reference/android/graphics/Shader.html dall'API 1. È un metodo bitmapDrawable per la modalità ripetizione http://developer.android.com/reference/ android/graphics/drawable/BitmapDrawable.html # setTileModeXY (android.graphics.Shader.TileMode, android.graphics.Shader.TileMode) – Goofyahead

+0

sta visualizzando a schermo intero (il pattern di ripetizione si stava applicando per la visualizzazione totale diversa dalla mia vista personalizzata che voglio ripetilo fino ai bordi della vista personalizzata la vista rimanente dovrebbe essere di colore bg). –

Problemi correlati