2012-07-04 8 views
5

Quiero restringir el patrón de repetición de un conjunto de pequeños patrones aleatorios a una región en particular. Estoy creando un objeto (CustomView) utilizando lienzo, tengo conocimiento de cómo repetir un patrón en el diseño utilizando el código xml.¿Cómo se repite un patrón en la Vista personalizada hasta límites?

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

esto no está trabajando para el lienzo.

Básicamente, quiero utilizar un mapa de bits como imagen de fondo para la vista personalizada y me gustaría repetir el mapa de bits en las direcciones de vista X e Y.

vistazo a esta imagen

enter image description here

Respuesta

7

Por favor, intente con este código: -

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

Voy a este código ... –

+0

está funcionando gracias, Kumar .... –

+0

me puedes ayudar con este http://stackoverflow.com/questions/19264300/bitmap-with-tile-mode-repeat-and-round-corners – Goofy

2

Usted puede hacer su componente personalizado con un mapa de bits de fondo repitió:

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

y usted puede hacer una máscara con la imagen que desea como esa triángulo y tu 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; 
} 

que utilizará una máscara donde el color negro es la imagen final.

Si no me malinterpretaron, eso puede lograr lo que se muestra en la captura.

Saludos, Alex

+0

por eso que soy capaz de importar Shader, es que requiere cualquier archivo jar. –

+0

No hay ninguna necesidad especial, http://developer.android.com/reference/android/graphics/Shader.html desde API 1. Es un método de mapa de bits para repetir el modo de repetición http://developer.android.com/reference/ android/graphics/drawable/BitmapDrawable.html # setTileModeXY (android.graphics.Shader.TileMode, android.graphics.Shader.TileMode) – Goofyahead

+0

está tomando una vista completa (ese patrón de repetición se estaba aplicando para una vista total distinta de la vista personalizada que quiero repítalo hasta los límites de vista personalizada vista restante debe ser de color bg). –

Cuestiones relacionadas