ImageView 画像の明度を変える方法

1,908 views
Skip to first unread message

otsuka

unread,
May 11, 2012, 9:06:35 AM5/11/12
to android-g...@googlegroups.com
大塚と申します。

画像をボタン代わりにするために ImageView を使っております。
このボタンをタッチしたときに、画像の明度をプログラムで
暗くして pressed 状態の画像代わりにしたいと考えているのですが、
このような方法はあるでしょうか?

Stone

unread,
May 11, 2012, 11:16:41 AM5/11/12
to 日本Androidの会
Stone@調布、東京です。

ついに横断陸橋さえ渡れないほど高所恐怖症が悪化してしまいました。

余談はさておき、それ前にやったことがあります。
私の場合、ImageViewの明度を変えるのは鼻からあきらめて、
そのViewの上に半透明のImageViewを重ねて、それのVisibleをオンオフするという
恐ろしい方法で実装しました。

MORIHIRO

unread,
May 11, 2012, 12:38:49 PM5/11/12
to android-g...@googlegroups.com
onClick()をoverrideして、以下を呼び出してみては?
 ImageView.setColorFilter(int color, PorterDuff.Mode mode)
 → colorやmodeをいくつにすればいいのかは要調整...


2012年5月11日金曜日 22時06分35秒 UTC+9 otsuka:

otsuka

unread,
May 12, 2012, 3:05:39 AM5/12/12
to android-g...@googlegroups.com
Stoneさん、MORIHIROさん、ありがとうございます。

LightningColorFilter クラスと ImageView.setColorFilter() メソッドを用いた
次のような OnTouchListetner インターフェース実装を
ImageView.setOnTouchListner() にセットするようにして希望通りの挙動を
実現できました。

class ImageViewOnTouchListener implements OnTouchListener {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                ((ImageView) v).setColorFilter(new LightingColorFilter(Color.LTGRAY, 0));
                break;
            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_OUTSIDE:
                ((ImageView) v).clearColorFilter();
                break;
        }
        return false;
    }

}
Reply all
Reply to author
Forward
0 new messages