2016-07-19 12 views
0

Android(API 15)からPhotoshopのマスキングのようなビューをクリップ/サブトラクションする方法はありますか?Androidビューのクリッピング/減算

は、以下の例を参照してください:青1は、より複雑なものである一方、 https://s31.postimg.org/d18lktjq3/index.jpg

をレッドビューは、ちょうど大胆面白いV字状です。 赤いビューでは、ストライプ部分が透明であることに注意してください。 私が得たい結果のビューは、青い大きなビューのようなもので、2番目のビューのVシェイプと上のものは切り取られています。

最終結果では、V字形の内側のスペースは透明でなければならないことに注意してください。

現在、私は2つのビューを1つずつ他のもの(V字形ビューのギャップを埋める)を使ってこの効果を達成していますが、これは他のビューが何であるかを正確に知る必要があるため、ソースよりもビューが大きくなっています。

は、Androidであなたに

答えて

0

をありがとう、これはポーター・ダフの転送モードを使用して行われます。

これは、2つのオーバーレイビットマップ(赤いV字形を持つもの)と下位レイヤーから切り取りたいものすべてを表す補完ビットマップを持つことをお勧めします。カスタムビューで

、次の手順を実行するonDraw()をオーバーライドします。

  • は、ベース(青)を描くビットマップ
  • はトップVを描く
  • ポーター・ダフモードSRC_OVERを使用して、赤のストライプを描きますPorter-Duffモードを使用したカットアウトCLEAR

コードは次のようになります(ビットマップを作成し、それらを描画するx、y座標を計算したと仮定します)。

Paint paint = new Paint(); 
    paint.setAntiAlias(true); 

    canvas.drawBitmap(blue_base, blueX, blueY, paint); 

    // draw the red v on top of the blue part 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); 
    canvas.drawBitmap(red_v, redX, redY, paint); 

    // erase the unwanted pixels from the blue part 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
    canvas.drawBitmap(cut_out, redX, redY, paint); 

ここであなたが始めるために興味深いチュートリアルです:Punch a hole in a bitmap by using Android's porter-duff Xfer - TechRepublic