您的位置:首页 > 其它

ImageView点击效果(变色)

2016-11-22 19:03 267 查看
ImageView点击效果(变色)功能

1 、用两张图片,一张原图,一张深色效果,添加xml文件,点击的时候切换,但必需是固定的图片,而在开发过程中经常是即时网络下载的图片,这样就要用另一种办法

2、自定义一个view extends ImageView,然后通过设置滤镜来实现这一效果,如下面代码

package utils;

import android.content.Context;
import android.graphics.ColorMatrixColorFilter;
import android.util.AttributeSet;
import android.widget.ImageView;

/**
* Created by minghao_zl on 14-9-17.
* 公共的蒙版ImageView(点击变暗效果)
*/
public class MaskableImageView extends ImageView{

private boolean touchEffect = true;
public final float[] BG_PRESSED = 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[] BG_NOT_PRESSED = new float[] { 1, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 };

public MaskableImageView(Context context) {
super(context);
}

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

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

@Override
public void setPressed(boolean pressed) {
System.out.println("setPressed");
updateView(pressed);
super.setPressed(pressed);
}

/**
* 根据是否按下去来刷新bg和src
* created by minghao.zl at 2014-09-18
* @param pressed
*/
private void updateView(boolean pressed){
System.out.println("updateView");
//如果没有点击效果
if( !touchEffect ){
return;
}//end if
if( pressed ){//点击
/**
* 通过设置滤镜来改变图片亮度@minghao
*/
this.setDrawingCacheEnabled(true);
this.setColorFilter( new ColorMatrixColorFilter(BG_PRESSED) ) ;
this.getBackground().setColorFilter( new ColorMatrixColorFilter(BG_PRESSED) );
}else{//未点击
this.setColorFilter( new ColorMatrixColorFilter(BG_NOT_PRESSED) ) ;
this.getBackground().setColorFilter(
new ColorMatrixColorFilter(BG_NOT_PRESSED));
}
}
}

在xml中把imageview定义为,注意一定要设置background,否则会报错<utils.MaskableImageView
android:id="@+id/iv_zan1_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/show_index2"

/>
在activity中获取到这个imageView的控件,并运行setPressed方法,当传入值为true时表示按下去(变暗),放开手时传进false表示提起,变回原来图片

iv_zan1_2.setPressed(true);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: