|
|
发表于 2016-9-6 20:18:55
|未经授权,严禁转载,违者必究...
|
|阅读模式
恍惚 高斯 简单 动态 Android
写在前面
比来一向在做毕设项目标预备工作,考虑到可能要用到一个恍惚的结果,所以就进修了一些高斯恍惚结果的实现。比力有名的就是 FastBlur 以及它衍生的一些优化方案,还有就是今天要说的 RenderScript 。
可以看到,图片已经实现了恍惚结果,并且速度还蛮快的,总的来说经由过程 BlurBitmapUtil.blurBitmap() 就能获得一张恍惚结果的图 。
那为什么不克不及手动去设置恍惚水平呢?他给出的注释是:
不外这个 BlurredView 封装的不是太好,我删减了一部门内容,原因稍后再说。先来看一下焦点代码。
[I]
[I]
同时也界说了一些属性:
一个是设置图片,一个是设置是否禁用恍惚。最后就是 BlurredView 类,代码如下,有年夜量删减,只贴出焦点代码:
从代码中可以看到,最焦点的就是下面三个方式:
思绪就是先选定一张图片,一张作为原图,一张作为恍惚处置过的图。再别离将这两张图设置给自界说 BlurredView 中的两个 ImageView ,最后处置恍惚事后的那张图的透明度。
可以看到,设置了图片,设置了开启恍惚,那么我们在Activity中只需设置透明水平即可:
结果图与上图一样,这里就不反复贴了。可以看到,代码简单了良多,不外仅仅因为便利简单可不是自界说 View 的感化,感化在于接下来要说的 动态恍惚结果 的实现。
从图中可以看到,跟着我们触摸屏幕的时辰,布景的恍惚水平会跟着转变。假如要直接设置其恍惚度会及其的卡顿,所以正如原博主所说,可以用两张图片来实现。
/**
* 初始化View
*/
private void initView() {
customBView = (BlurredView) findViewById(R.id.bv_dynamic_blur);
//设置初始恍惚度
initLevel = 100;
customBView.setBlurredLevel(initLevel);
}
/**
* 触摸事务
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
downY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
float moveY = ev.getY();
//手指滑动距离
float offsetY = moveY - downY;
//屏幕高度 十倍是为了看出展示结果
int screenY = getWindowManager().getDefaultDisplay().getHeight() * 10;
//手指滑动距离占屏幕的百分比
movePercent = offsetY / screenY;
currentLevel = initLevel + (int) (movePercent * 100);
if (currentLevel 100) {
currentLevel = 100;
}
//设置恍惚度
customBView.setBlurredLevel(currentLevel);
//更改初始恍惚品级
initLevel = currentLevel;
break;
case MotionEvent.ACTION_UP:
break;
}
return super.onTouchEvent(ev);
}
从代码中可以看到,这里是经由过程手指滑动距离占屏幕的百分比来计较改变后的透明品级的,代码应该不难,很轻易理解。当然原博主博客中是经由过程进度条来改变的,也是可以的,就不在赘述了。
先来看一张结果图,这个图也是模仿原博主去实现的,可是仍是有略微的分歧。
原本的自界说 BlurredView 中还有几段代码是改变布景图的位置的,因为但愿上拉下拉的时辰布景图也是可以移动的,可是从体验来看结果不是太好,上拉的过程中会呈现留白的问题。
重点仍然是动态恍惚的实现,在上面的动态恍惚中,我们采纳了重写 onTouchEvent 方式,可是这里刚好是 RecylcerView ,我们可以按照它的滚动监听,也就是 onScrollListener 来完成动态改变透明度,焦点方式如下:
代码很简单,就是在 onScrolled 方式入彀算并动态改变透明度,只要把握了道理,实现起来仍是很轻易的。
当然也可能跟模拟器有关系,真机上测试是很快的。并且貌似比 FastBlur 还快一点,等有空测试几个高斯恍惚实现方式的机能,来对比一下。
RenderScript - Android Developers
高斯恍惚结果实现方案及机能对比 - lcyFox
项目源码
BlurDemo - IamXiaRui - Github
|
|