2011-12-28 19 views
2

トピックに関する他の質問や、XferModesのAPIデモを行い、アルファマスクに従ってコンテンツをマスクするImageViewを作成しようとしました。 アルファビットマップには、非表示にする領域に0アルファ、表示する領域に255アルファが含まれています。マスク付きのImageViewを作成する

これはonDrawコードです:

@Override 
protected void onDraw(Canvas canvas) 
{ 
    super.onDraw(canvas); 

    Paint paint = new Paint(); 
    paint.setFilterBitmap(false); 
    paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); 

    canvas.drawBitmap(mMaskBitmap, 0, 0, paint); 
    paint.setXfermode(null); 

それは私のために動作しません。 SRC_INを置くと、マスクが上に描画されます。 DSTを入れると元の画像が表示されます。

任意のアドバイスはありますか?

答えて

1

問題が解決しました。ImageViewとマスクビットマップのサイズに4ピクセルの違いがあることが判明し、すべてが静かに機能しなくなりました。例外はスローされませんでした。

とにかく、上記のコードは、マスクサイズ< = ImageViewサイズであれば動作します。

+0

これは期待どおりに機能しませんでした。あなたのために、これはImageView.onDraw()が描いた内容をマスクしますか? – cottonBallPaws

+0

私はあなたからのフィードバックを得たいと思っています。上記のコードを試してみると、マスクは正しく適用されますが、背景を表示するためにイメージをフェードアウトする代わりに、バックグラウンドを黒色で表示します。しかし、同じテクニックを使用して新しいキャンバスを描画すると、結果のビットマップが正しくレンダリングされます。私が今やっていることは、(DST_INでアルファビットを正しく設定して)レンダリングし、元のImageViewビットマップを新しいものに置き換えるために必要な最終ビットマップを作成することです。 ImageView#onDraw()の何かが私が思う最終的なレンダリングを台無しにしています。 – AngraX

+0

うーん、そんなことを考えることはできません...私はそれについて何かを思い出すと、私はここに投稿します。 – SirKnigget

関連する問題