6

カスタム AdapterView 実装の場合、選択した項目にカラー オーバーレイを追加したいと思います。AdapterView の子にカラー オーバーレイを追加するにはどうすればよいですか?

4

2 に答える 2

10

独自のレイアウトを使用している場合は、コンテナーをRelativeLayout(または から継承する Layout クラスRelativeLayout) に変更し、メイン レイアウトの後にカラー オーバーレイを配置します。必要なのは、 を追加してView背景とアルファを設定するだけです。alpha値 1 に設定するとこのオーバーレイが有効になり、alpha0 に設定すると通常に戻ります。

例:

<RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <!-- add your views here -->

  <View
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#8000FF00" />

</RelativeLayout>

これにより、レイアウト内でその前にある他のビューの上に、50% アルファの緑色のレイヤーがオーバーレイされます。

于 2013-11-13T12:40:51.280 に答える
5

OK、さらに調査を行いました。それが私が最終的に思いついたものです:

// prepare a gray filter setting saturation to 0, or ...
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
Paint paint = new Paint();
ColorFilter filter = new ColorMatrixColorFilter(cm);

// ... prepare a color filter
ColorFilter filter = new PorterDuffColorFilter(Color.rgb(34, 136, 201), PorterDuff.Mode.OVERLAY);

// create paint
paint.setColorFilter(filter);


// override dispatchDraw of the view
@Override
protected void dispatchDraw(Canvas canvas) {
    if (isPressed()) {
        canvas.saveLayer(null, paint, Canvas.ALL_SAVE_FLAG);
        super.dispatchDraw(canvas);
        canvas.restore();
    } else {
        super.dispatchDraw(canvas);
    }
}
于 2013-11-14T06:49:33.423 に答える