2つの画像は、最初の画像をフレーム画像、2番目の画像をフレーム画像として呼び出します。ここではfstは私のリニアレイアウトであり、フレーム画像をその背景画像として設定します。今私はフレーム画像の白い領域にパターン画像を塗りたい。フレーム画像の外側の領域は透明で、内側の領域は白です。 フレームイメージにパターンイメージを埋め込むにはどうすればいいですか?私はこのコードを試しました。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);
}
しかし、これは正方形のビットマップ画像を与えています。 と私の画像ビューはこのような私はパターンを記入したいです。
パターン像は、私がこれだけイメージの白い領域にパターン画像を埋めるためにしたいthis-
のようなものです。私はこのイメージフレーム内の色を塗りつぶすことはできますが、パターンイメージの場合にはできません。いずれかが私を助けてくださいすることができます ...
UPDATEは: - は、私たちは私たちはシェーダを使用する必要がありますもっとして一つの色を設定したい場合、私は現在のコード
ので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;
}
を更新することを読んでここでは、シェーダを正常に設定できます。 DST_OVER、DST_IN
drawPaint.setColorFilter(new PorterDuffColorFilter(Color.YELLOW,Mode.MULTIPLY));
drawPaint.setXfermode(new PorterDuffXfermode(Mode.DST_OVER));
ではなく、必要に応じて結果を得る: メソッドがsetXfermode は何
@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);
}
を呼び出しますOnDrawこのメソッドの後、私はのように私のsetpattern方法 にいくつかのモードを試してみました。
は、私は、私は結果に非常に近いと思う任意のモードは現在、私は、この出力に
を取得しています私の目的を解決することができますです。私は今、私が今必要としているパターンを描くことができます。残っている問題は、フレームの内部非透明領域でのみパターンを設定することです。
Iはまた、されていない場合(canvasBitmap.getPixel(x、y)はColor.TRANSPARENTは==)私は別の不透明なパターンを充填することができるように透明な領域を同定するために
この
をしている試みたが、このワーキング。
ここで私は画像をアップロードしています。画像を吹き飛ばしてください。フレーム画像で色を塗りつぶしました。今、ピンクの色の代わりにパターンを塗りたいと思います。
誰もが共有してくださいしようとする任意の良い点を持つことができます...