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.
reticolo è come questo-
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
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.
chiunque può avere qualsiasi buon punto per provare si prega di condividere ...