0

ビューに線を描画するために onDispatchDraw(Canvas canvas) メソッドを使用しています。canvas.drawLine() を呼び出すと、常にすべてのビューの上に線が描画されます。ボタンの下に、canvas.drawLine() を使用してレイアウト内の別のビューの上に線を描画する方法はありますか?

次のことを試しましたが、それでもボタンの上に線が引かれます。

Button b;
RelativeLayout r;
@Override
protected void dispatchDraw(Canvas canvas) {
     super.dispatchDraw(canvas);

     Paint p = new Paint();
     p.setColor(Color.Black);

     canvas.drawLine(0,0,100,100,p);

     r.removeView(b);
     r.addView(b);
}
4

3 に答える 3

4

あなたは車輪を再発明しようとしています。Z オーダーはウィンドウ管理サブシステムに既に実装されており、それを使用できます。

  1. 描画するカスタム ビューを作成します。
  2. android:clickable="false"またはを使用してクリック不可にしsetClickable(false)ます。
  3. その背景を透明にして実装しdispatchDraw()ます。
  4. 描画したくないすべてのビューをビュー階層のこのビューの上に置きます。
于 2011-09-23T14:08:45.830 に答える
2

super.dispatchDraw()線を引いてから呼び出します。dispatchDraw はviewgroupその子を描画するために呼び出されるため、あなたの場合、呼び出すsuper.dispatchDraw()と最初にボタンが描画され、次にその上に線が描画されます。dispatchDrawこのようにしてください:

更新されたコード

class myListViewWithLine extends ListView {
....
    @Override
    protected void dispatchDraw(Canvas canvas) {

         Paint p = new Paint();
         p.setColor(Color.Black);
         canvas.drawLine(0,0,100,100,p);

         super.dispatchDraw(canvas);
    }
....
}
于 2011-09-24T07:52:55.363 に答える
0

もう1つの方法は、ボタンの下に好きな高さと背景色として1つのディップを持つビューを追加することです。線のように見えるはずです。

View v = new View(this);
ViewGroup.LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT,1);
v.setLayoutParams(lp);
v.setBackgroundColor(Color.WHITE);

addView(v,INDEX NUMBER AFTER THE BUTTON);
于 2011-09-23T12:45:12.810 に答える