在玩微信朋友圈时,发现每个图片的按下后,图片都会有一个变暗的效果,当时一想,做个selector应该就可以了,可是你每一张图片都是服务器拉取的,怎么去做selector,那在按下的时候我给每一张图片都加一个蒙层呢,是不是也可以解决,可是这个办法也太低端了。有什么别的办法吗?我直接去操作图片,让图片的颜色变暗就行了·····
自定义了一个图片的控件,别的不说 贴代码:
package com.huawei.pictureclick;
import android.content.Context;
import android.graphics.ColorMatrixColorFilter;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ImageView;
public class DarkImageView extends ImageView {
/**
* 选中时,图片的颜色矩阵,将每个颜色值的色度降低50,达到图片变暗的效果
*/
public final float[] BT_SELECTED = new float[] {
1, 0, 0, 0,-50,
0, 1, 0, 0, -50,
0, 0, 1, 0, -50,
0, 0, 0, 1, 0 };
/**
* 未选中时,将图片的颜色值还原
*/
public final float[] BT_NOT_SELECTED = new float[] {
1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0 };
public DarkImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public DarkImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public DarkImageView(Context context) {
super(context);
init();
}
private void init() {
this.setClickable(true);
}
/**
* 重写onTouchEvent方法,当手指在按下后,图片变暗,当手指抬起时,图片回复原样并响应自己的点击事件
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
this.setColorFilter( new ColorMatrixColorFilter(BT_SELECTED) ) ;
break;
case MotionEvent.ACTION_MOVE:
this.setColorFilter( new ColorMatrixColorFilter(BT_SELECTED) ) ;
break;
case MotionEvent.ACTION_UP:
this.setColorFilter( new ColorMatrixColorFilter(BT_NOT_SELECTED) ) ;
if(picClickListener != null){
picClickListener.click();
}
break;
default:
break;
}
return true;
}
private OnPicClickListener picClickListener;
public interface OnPicClickListener{
void click();
}
public OnPicClickListener getPicClickListener() {
return picClickListener;
}
public void setPicClickListener(OnPicClickListener picClickListener) {
this.picClickListener = picClickListener;
}
}
代码很简单,在使用中就是普通ImageView控件的使用,也可以给他设置点击事件,后面如何使用的代码就没必要写了。PS:感谢同学贾我斌的贡献