Android 图片 滤镜效果 通过矩阵实现
2016-04-06 00:00
218 查看
然,看到头像点击要加滤镜效果,有个新奇 的做法是用setColorFilter();
/** * Created by yx on 16/4/3. */public class DiscolorImageView extends ImageView{ /** * 变暗 */ private final float[] SELECTED_DARK = new float[] {1, 0, 0, 0, -80, 0, 1, 0, 0, -80, 0, 0, 1, 0, -80, 0, 0, 0, 1, 0}; /** * 变亮 */ private final float[] SELECTED_BRIGHT = new float[] {1, 0, 0, 0, 80, 0, 1, 0, 0, 80, 0, 0, 1, 0, 80, 0, 0, 0, 1, 0}; /** * 高对比度 */ private final float[] SELECTED_HDR = new float[] {5, 0, 0, 0, -250, 0, 5, 0, 0, -250, 0, 0, 5, 0, -250, 0, 0, 0, 1, 0}; /** * 高饱和度 */ private final float[] SELECTED_HSAT = new float[] {(float) 3, (float) -2, (float) -0.2, 0, 50, -1, 2, -0, 0, 50, -1, -2, 4, 0, 50, 0, 0, 0, 1, 0}; /** * 改变色调 */ private final float[] SELECTED_DISCOLOR = new float[] {(float) -0.5, (float) -0.6, (float) -0.8, 0, 0, (float) -0.4, (float) -0.6, (float) -0.1, 0, 0, (float) -0.3, 2, (float) -0.4, 0, 0, 0, 0, 0, 1, 0}; public DiscolorImageView(Context context) { super(context); this.setOnTouchListener(VIEW_TOUCH_DISCOLOR); } public DiscolorImageView(Context context, AttributeSet attrs) { super(context, attrs); this.setOnTouchListener(VIEW_TOUCH_DISCOLOR); } public DiscolorImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.setOnTouchListener(VIEW_TOUCH_DISCOLOR); } public OnTouchListener VIEW_TOUCH_DISCOLOR = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { ImageView iv = (ImageView) v; iv.setColorFilter(new ColorMatrixColorFilter(SELECTED_HDR)); //iv.setColorFilter(new ColorMatrixColorFilter(SELECTED_BRIGHT)); //iv.setColorFilter(new ColorMatrixColorFilter(SELECTED_HDR)); //iv.setColorFilter(new ColorMatrixColorFilter(SELECTED_HSAT)); //iv.setColorFilter(new ColorMatrixColorFilter(SELECTED_DISCOLOR)); } else if (event.getAction() == MotionEvent.ACTION_UP) { ImageView iv = (ImageView) v; iv.clearColorFilter(); mPerformClick(); } else if (event.getAction() == MotionEvent.ACTION_CANCEL) { ImageView iv = (ImageView) v; iv.clearColorFilter(); } return true; } }; private void mPerformClick() { DiscolorImageView.this.performClick(); } }
相关文章推荐
- Android关键概念
- Android动画之属性动画1 自由落体
- Android-基于事件进度的库
- Android上可执行ELF文件中的段不能有基址
- GDB远程调试Android上的可执行ELF文件
- Android MVP模式开发
- 你想要的这都有-Android关于日期的工具类dateUtils:
- Android电源管理 -- wakelock机制
- 破解android手机图形锁
- Android测试之旅之JUnit(一)
- <activity>
- 你想要的这都有-Android文件工具类FileUtils
- DateTimeUtil 工具类,android 和 java 通用
- <action>
- Android学习之5.0三姐妹调色板palette的使用
- Android——对话框2(日期和时间对话框)
- Android——子线程操作主线程
- [android] 手机卫士欢迎细节和主界面
- android 代码连接 wifi
- Task和Back Stack