模糊算法参考:

http://blog.csdn.net/markl22222/article/details/10313565

网上很多,这东西是个概念理解,没有什么新鲜的。

轮子有现成的,模糊算法无非是java和jni实现。有兴趣可以自己写一遍。这里直接用现成的了。

compile 'net.qiujuer.genius:blur:2.0.0-beta4'

实现在头部虚化。1.获得bitmap,2.对bitmap处理生成虚化图像,3.应用。

获取图片,可以http请求完成。但现在都是图片框架,没有必重新去写下载。

此处使用Glide下载 。代码如下:

Glide.with(getActivity()).load("http://img4.duitang.com/uploads/item/201509/04/20150904010805_inyuE.jpeg")
.asBitmap().into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
Bitmap bitmap =StackBlur.blurNativelyPixels(resource, 50, false);
//set to imageview
}
});

是不是很轻松~

代码运行起来。

图片处理还是比较慢的。你会发现,背景会慢一会儿出现,也还算正常 。

但后来想想,Glide给了transform()方法,还是有缓存的。

为什么不用。然后代码改为:

ackage com.lechang.utils;

import android.content.Context;
import android.graphics.Bitmap; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; import net.qiujuer.genius.blur.StackBlur; public class GlideBlurTransform extends BitmapTransformation {
public GlideBlurTransform(Context context) {
super(context);
} @Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return blurImage(pool, toTransform);
} private static Bitmap blurImage(BitmapPool pool, Bitmap source) {
if (source == null) return null;
return StackBlur.blurNativelyPixels(source, 50, false);
} @Override
public String getId() {
return getClass().getName();
}
}
Glide.with(getActivity())
.load("http://img4.duitang.com/uploads/item/201509/04/20150904010805_inyuE.jpeg")
.transform(new GlideBlurTransform(getActivity()))
.into(ivBg);

这样有了缓存,每次进来也不用等了。

现在来实现

斜着的一块白色背景

简单的方法美术切一块白色多边形往上面一铺。

但我觉得应该有好的方法,还省资源。那就自定义一个bitmap

public static Bitmap getPathBitmap(int w, int h) {

        Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_4444);
Paint paint = new Paint();
Path path = new Path();
path.moveTo(0, 2 * h / 3); // 此点为多边形的起点
path.lineTo(w, 0);
path.lineTo(w, h);
path.lineTo(0, h);
// 使这些点构成封闭的多边形
path.close();
Canvas canvas = new Canvas(bitmap);
paint.setColor(Color.WHITE);
paint.setAntiAlias(true);
// 绘制这个多边形
canvas.drawPath(path, paint);
return bitmap;
}

最后圆形头像,不多说了,看这篇:http://www.cnblogs.com/mamamia/p/7814404.html

切圆算法:

  private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null; int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2; // TODO this could be acquired from the pool too
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size); Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
} Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
return result;
}

最终效果

android 模糊背景 异型背景的更多相关文章

  1. Android 设置进度条背景

    Android 设置进度条背景 直接上代码 <ProgressBar android:id="@+id/progressBar" android:layout_width=& ...

  2. android中的selector背景选择器的用法

    关于listview和button都要改变android原来控件的背景,在网上查找了一些资料不是很全,所以现在总结一下android的selector的用法. 首先android的selector是在 ...

  3. Android的selector,背景选择器

    原文地址 http://android.blog.51cto.com/268543/564581 首先android的selector是在drawable/xxx.xml中配置的,相关图片放在同目录下 ...

  4. 为Android GridView 设置行背景

    经常有这样的需求,你的功能图标要像一个个物品,摆放在书架上,像这样: 我的思路比较简单,重载GridView,在他绘制子视图前,先把背景绘制完成 1 2 3 4 5 6 7 8 9 10 11 12 ...

  5. 浅谈android的selector,背景选择器

    shape和selector的结合使用 (2013-04-07 11:11:00) 转载▼   分类: android 1.Shape (1)作用:XML中定义的几何形状 (2)位置:res/draw ...

  6. ANDROID SHAPE画圆形背景_ANDROID实现角标布局

    ANDROID SHAPE画圆形背景_ANDROID实现角标布局 <?xml version="1.0" encoding="UTF-8"?> &l ...

  7. 更改Android Studio的主题背景

    看到别人炫酷的主题,好奇心使然,想要选择一个自己喜欢的炫酷背景,于是乎百度,动手尝试更换各种主题. 保存下来,留着以后想换主题的时候看. 1.Android Studio自带主题 File -> ...

  8. android实现点击背景图片不同区域实现不同事件

    有时候我们拿到一张背景图片,客户要求点击图片的不同区域去跳转或者实现不同的操作事件.我们首先要确认图片的点击区域,往往我们会在布局文件那里下手,但是这样不好做适配,所以我实现了以下方法,基本功能可以实 ...

  9. android 项目中设置背景图片

    xml文件设置背景图片中:任意一个控件,button imageView 或layout,在其的xml属性设置中,添加 [XML] view plaincopy android:background= ...

随机推荐

  1. Spark在美团是怎么实现的

    目录 1. 美团离线计算平台架构都有哪些框架? 2. 为什么要使用Spark架构? 3. spark推广过程中需要注意哪些方面? 前言 美团是数据驱动的互联网服务,用户每天在美团上的点击.浏览.下单支 ...

  2. MySQL查询一张表有多少个字段

    SQL如下 select count(*) from information_schema.COLUMNS where TABLE_SCHEMA='数据库名' and table_name='表名'

  3. Dubbo 04 服务化最佳实现流程

    Dubbo 04 服务化最佳实践 分包 建议将服务接口.服务模型.服务异常等均放在 API 包中,因为服务模型和异常也是 API 的一部分,这样做也符合分包原则:重用发布等价原则(REP),共同重用原 ...

  4. SimpleDateFormat问题

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; impo ...

  5. mysql 主从 Last_IO_Errno错误代码说明

    Last_IO_Errno错误代码说明:  1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件 ...

  6. noi.ac NA529 【神树的矩阵】

    表示今天一发A了这题拿了rk3...是个sb构造... 考虑除了\(n=1/m=1\)的情况,最小次数\(ans\)不会\(>3\). 对于\(n=1/m=1\),暴力即可. 然后考虑\(ans ...

  7. js - 执行上下文和作用域以及闭包

    首先,咱们通常被"执行上下文","执行上下文环境","上下文环境","执行上下文栈"这些名词搞混.那我们一一来揭秘这些名 ...

  8. WSL中使用npm install报错

    报错内容类似下面的格式.具体解决方法请看这里:https://github.com/Microsoft/WSL/issues/14 着重关注 https://github.com/Microsoft/ ...

  9. vue启动问题(You may use special comments to disable some warnings. Use // eslint-disable-next-line to ignore the next line. Use /* eslint-disable */ to ignore all warnings in a file.)

    解决vue启动出现: 在build/webpack.base.conf.js文件中,把...(config.dev.useEslint ? [createLintingRule()] : [])注释或 ...

  10. zabbix-server一键部署

    最近想写一个zabbix脚本,自己尝试几次,能够实现,但是太糙了,在github上发现一个很好,谢谢作者脚本作者:火星小刘 web:www.huoxingxiaoliu.com email:xtlyk ...