2013-11-22 16 views
5

Due immagini sono date colpo io chiamo prima immagine come immagine di fotogramma e seconda immagine come immagine di fotogramma. Prima è il mio Layout lineare e ho impostato l'immagine-quadro come immagine di sfondo di esso. Ora voglio riempire l'immagine del pattern nell'area bianca dell'immagine del mio frame. L'area esterna dell'immagine del fotogramma è trasparente e l'area interna è bianca. Come posso riempire l'immagine del modello nel mio frame-Image. Ho provato questo codice.Fill pattern in Image in Android

private void patternFill(Bitmap tempBitmapColor) { 
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pattern_a); 
     BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp); 
     bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); 
     fst.setBackgroundDrawable(bitmapDrawable); 


} 

ma questo sta dando un'immagine bitmap quadrata. e il mio Imageview è come questo in cui voglio riempire lo schema.

enter image description here

reticolo è come questo-

enter image description here

voglio riempire immagine Reticolo nell'area bianca di questa immagine unica. Sono in grado di riempire il colore all'interno di questa cornice immagine ma non nel caso di immagini modello. uno può aiutarmi per favore ...

UPDATE: - ho letto che se vogliamo impostare più di un colore così dovremmo usare lo shader ho aggiornato il codice corrente

public void setPattern(String newPattern){ 
      postInvalidate(); 
      //get pattern 
      int patternID = getResources().getIdentifier(newPattern, "drawable", "com.akanksha.partternfillexperiment"); 
      //decode 
      Bitmap patternBMP = BitmapFactory.decodeResource(getResources(), patternID); 
      //create shader 
      BitmapShader patternBMPshader = new BitmapShader(patternBMP, 
        Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); 
      //color and shader 
//   drawPaint.setColor(0xFFFFFFFF); 
      drawPaint.setShader(patternBMPshader); 
      patternset=true; 

} 

Così , Qui sono in grado di impostare lo shader con successo. Dopo questo metodo OnDraw metodo chiamerà

@Override 
    protected void onDraw(Canvas canvas) { 

     if(patternset){ 

     for (int x = 0; x < canvasBitmap.getWidth(); x++) { 
      drawPath.moveTo(x, 0); 
      for (int y = 0; y < canvasBitmap.getHeight(); y++) { 
drawPath.lineTo(x, y); 

      } 

      drawCanvas.drawPath(drawPath, drawPaint); 
      drawPath.reset(); 
      invalidate(); 
      canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint); 
      canvas.drawPath(drawPath, drawPaint); 
     } 

Qual è setXfermode Ho provato alcuni modalità nel mio metodo setpattern come: DST_OVER, DST_IN

drawPaint.setColorFilter(new PorterDuffColorFilter(Color.YELLOW,Mode.MULTIPLY)); 

     drawPaint.setXfermode(new PorterDuffXfermode(Mode.DST_OVER)); 

ma non ottenendo risultato a seconda delle necessità.

Is qualsiasi modalità può risolvere il mio scopo attualmente sto ottenendo questa uscita

enter image description here

Penso di essere molto vicino al risultato. Posso disegnare il modello di cui ho bisogno ora il problema rimanente è di impostare il patten solo nell'area interna non trasparente del fotogramma.

Ho anche provato questo

se (canvasBitmap.getPixel (x, y) == Color.TRANSPARENT)

identificare zona trasparente in modo che possa occupare modello in un altro non trasparente sono, ma anche questo non lavoro.

Qui sto caricando l'immagine per ulteriori chiarimenti Nel colpo Image riempio il colore nell'immagine-quadro Ora voglio riempire il motivo al posto del colore rosa.

enter image description here

chiunque può avere qualsiasi buon punto per provare si prega di condividere ...

risposta

0

Si può avere sguardo sul seguente tutorial per il vostro aiuto

Drawing with Pattern Fills di Sue Smith

Utilizzando il tutorial di cui sopra è possibile ottenere output seguente enter image description here