6

私は ImageView を持っています。ユーザーがクリックするかフォーカスを合わせると、ImageView コンテンツの上に半透明の色が描画されるようなセレクターが必要です。これがセレクターで可能かどうかはわかりません(過去に静的ドローアブルでOKと定義していました)。

しかし、基本的には、各行に imageview インスタンスを持つリストビューがあり、次のようなことをしたかったのです:

ImageView iv = ...;
iv.setBitmapDrawable(bitmapLoadedFromInternets()); // dynamic content
iv.setClickStateOverlayColor(0x33ff0000); // ?

通常、ImageView は setBitmapDrawable() を介して 1 つのドローアブルのみを取得しますが、セレクターは (1) 異なるクリック状態のドローアブルを交換しますが、私はカラー オーバーレイを描画するだけであり、(2) オフ状態は動的ビットマップであるため、セレクタ定義からそれを参照することはできません。

ありがとう

4

3 に答える 3

13

の独自のサブクラスを作成すると、非常に簡単に実行できますImageView。使用するメソッドはsetColorFilterです。このような何かがそれを行います:

public class ImageView extends android.widget.ImageView
{
    public ImageView(Context context)
    {
        super(context);
    }

    public ImageView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public ImageView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        if(event.getAction() == MotionEvent.ACTION_DOWN && isEnabled())
            setColorFilter(0x33ff0000, PorterDuff.Mode.MULTIPLY); //your color here

        if(event.getAction() == MotionEvent.ACTION_UP)
            setColorFilter(null);

        return super.onTouchEvent(event);
    }
}

my.package.ImageViewの代わりに完全修飾 like を参照するだけで、XML レイアウトで使用できますImageView

于 2012-05-23T16:45:40.540 に答える
9

onTouch を使用したソリューションは、複数の理由でうまくいきませんでしたが、うまくいくようにするためのヒントを教えてくれました。ImageView の別のメソッドをオーバーライドしました。

@Override
    public void setPressed(boolean pressed) {
        if (pressed) {
            setColorFilter(0x55000000, PorterDuff.Mode.SRC_ATOP);
        }
        else {
            clearColorFilter();
        }
        super.setPressed(pressed);
    }
于 2013-12-16T14:05:42.723 に答える
0

これは私のために働く

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/grid" />
    <item>
        <selector>
            <item android:state_pressed="true">
                <color android:color="#7000" />
            </item>
        </selector>
    </item>

</layer-list>
于 2014-11-21T08:16:47.253 に答える