模糊算法参考:

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. JavaScript斑马线表格制作

    //实现斑马线表格 //方法1: document.write('<table border="1">'); for(var i=1; i<11; i++){ i ...

  2. javascript 几个易错点记录

    1.清空input标签值得时候,不能用html("")清空,要用val("")清空 2.事件如果绑定多次,触发事件后,回调函数也会执行多次,所有最好把绑定事件的 ...

  3. context容器上下文件

    在web项目中想要获取哪个bean,得先得到容器上下文context public class MyLoaderListener extends ContextLoader implements Se ...

  4. tensorflow以文件形式运行程序实例

    在命令行中进入到代码所在文件夹 执行python mnist2.p或python aaa/mnist2.py这种形式

  5. Java 建造者模式 简单的理解

    建造者模式 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,使用多个简单的对象一步一步构建成一个复杂的对象. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表 ...

  6. shell变量、函数和数组以及字符串的截取

    一.变量 1.shell变量名 (1)可以由字母.数字.下划线等字符组成.但是第一个字符必须是字母或者下划线. (2)若果变量中包含下划线(_)则要特别注意,$project_svn_$date.ta ...

  7. IPC 进程间通信方式——管道

    进程间通信概述 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到. 通知时间: ...

  8. hiho #1144 : 01串(模拟)

    #1144 : 01串 时间限制:7000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个整数n和m,求是否存在恰好包含n个0和m个1的01串S,使得S中不存在子串"001 ...

  9. 网络编程简介(OSI七层协议,TCP协议原理,三次握手与四次挥手)

    目录 网络编程 软件开发架构 C/S架构 B/S架构 网络编程的发展史 互联网协议 1.物理连接层 2.数据链路层 3.网络层 4.传输层 5.应用层 三次握手四次挥手 三次握手建链接 数据传输 四次 ...

  10. electron桌面通知,修改默认通知应用名electron.app.Electron为自己应用的名称

    在做electron桌面通知时,按照文档实现弹出通知,但是默认的应用名为electron.app.Electron 解决办法 就是在主进程中设置 app.setAppUserModelId('myAp ...