先上两个截图,如下:
支付宝:
QQ:
如上两图用红色框框住的部分,当手纸按压时,图片透明度发生变化,但是背景颜色没有变化,这和我们平常所用的控件按压效果不太一样,但是要做到这种效果也不难,我们可以让美工做两套图片出来,然后设置正常状态和按压状态时的图片即可, 但是这样会造成应用的包体积很大,毕竟有很多地方都需要这种效果,不是首选之法。第二种方式是利用ImageView的tint属性即可达到这样效果,在xml文件中使用:android:tint =" ”或者在java代码中使用ImageView.setColorFilter(); ImageView的这个方法的作用就是给src中的图片加上一层遮罩层,再经过一些触摸事件的处理就能实现类似支付宝或者QQ中的效果。
下面直接给出一个我自己写的工具类,然后就可以一行代码实现这种效果,代码如下:
package com.lanma.conveniencecar.utils;
import android.graphics.Color;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
/**
* 作者 qiang_xi on 2016/8/29 14:12.
* view初始化完毕之后,建议在onCreate方法里调用 ImageViewTintUtil.setImageViewTint((ImageView) findViewById(R.id.xx));即可
*/
public class ImageViewTintUtil {
public static void setImageViewtint(final ImageView imageView, final int color) {
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
imageView.setColorFilter(color);
break;
case MotionEvent.ACTION_UP:
imageView.setColorFilter(null);
break;
}
//这里一定要return false,不然该方法会拦截事件,造成不能响应点击等操作
return false;
}
});
}
public static void setImageViewTint(final ImageView imageView) {
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
imageView.setColorFilter(Color.parseColor("#89DBFA"));
break;
case MotionEvent.ACTION_UP:
imageView.setColorFilter(null);
break;
}
//这里一定要return false,不然该方法会拦截事件,造成不能响应点击等操作
return false;
}
});
}
}
注意事项:
已经在代码中表明的很清楚了,即一定要返回false,不然onTouch方法会拦截事件,导致ACTION_DOWN、ACTION_UP、ACTION_MOVE等一系列事件不再传递到ImageView的onTouchEvent()方法,进而造成不能响应点击事件等问题!!!