2016-10-19 4 views
1

私は、ヘッダとメニュー項目の円で構成されるViewGroupを持っています。基本的には、私のアイテムビューがヘッダービューの後ろにある閉鎖/開始アニメーションがあります。すべてのビューには透明性があるため、アイテムビューがヘッダービューの後ろにあるとき、それらは表示され、ヘッダービューの後ろに透明シートを介して表示されます。特定の子ビューの前に描画

私がしたかったのは、アイテムビューをhweaderビューと交差させ、交差点を消去することでした。私が思いついたのは、dispatchDrawをオーバーライドして何かをすることでした。PorterDuff.Mode.CLEAR

しかし、私はすべてのビューに対してこれを一度に行うことができます。下のコードを使用すると、その特定の領域のビューに描画されたすべてのものが消去され、ヘッダーも消去されます。

@Override 
protected void dispatchDraw(Canvas canvas) { 
    super.dispatchDraw(canvas); 
    //do stuff here 
} 

ビューを再描画する方法はありますか、消去したいビューを選択する方法はありますか?

答えて

1

今後の参考として、これは私が行ったものです。ディスパッチドローをオーバーライドし、指定された領域を消去して再度子を描画しますchild.draw(canvas)

@Override 
protected void dispatchDraw(Canvas canvas) { 
    super.dispatchDraw(canvas); 
    Paint p = new Paint(); 
    p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
    canvas.drawCircle((float) center.x, (float) center.y, headerSize/2, p); 
    canvas.save(); 
    canvas.translate(padding, padding); 
    getChildAt(0).draw(canvas); 
    canvas.restore(); 
} 
関連する問題