2013-11-22 50 views
5

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); 


} 

しかし、これは正方形のビットマップ画像を与えています。 と私の画像ビューはこのような私はパターンを記入したいです。

enter image description here

パターン像は、私がこれだけイメージの白い領域にパターン画像を埋めるためにしたいthis-

enter image description here

のようなものです。私はこのイメージフレーム内の色を塗りつぶすことはできますが、パターンイメージの場合にはできません。いずれかが私を助けてくださいすることができます ...

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方法 にいくつかのモードを試してみました。

は、私は、私は結果に非常に近いと思う任意のモードは現在、私は、この出力に

enter image description here

を取得しています私の目的を解決することができますです。私は今、私が今必要としているパターンを描くことができます。残っている問題は、フレームの内部非透明領域でのみパターンを設定することです。

Iはまた、されていない場合(canvasBitmap.getPixel(x、y)はColor.TRANSPARENTは==)私は別の不透明なパターンを充填することができるように透明な領域を同定するために

この

をしている試みたが、このワーキング。

ここで私は画像をアップロードしています。画像を吹き飛ばしてください。フレーム画像で色を塗りつぶしました。今、ピンクの色の代わりにパターンを塗りたいと思います。

enter image description here

誰もが共有してくださいしようとする任意の良い点を持つことができます...

答えて

0

あなたが出力enter image description here

を得ることができ、次の上記のチュートリアルを使用したスー・スミス

でお願い

Drawing with Pattern Fillsために、次のチュートリアルで見ることができます

関連する問題