android 模糊背景 异型背景
模糊算法参考:
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 模糊背景 异型背景的更多相关文章
- Android 设置进度条背景
Android 设置进度条背景 直接上代码 <ProgressBar android:id="@+id/progressBar" android:layout_width=& ...
- android中的selector背景选择器的用法
关于listview和button都要改变android原来控件的背景,在网上查找了一些资料不是很全,所以现在总结一下android的selector的用法. 首先android的selector是在 ...
- Android的selector,背景选择器
原文地址 http://android.blog.51cto.com/268543/564581 首先android的selector是在drawable/xxx.xml中配置的,相关图片放在同目录下 ...
- 为Android GridView 设置行背景
经常有这样的需求,你的功能图标要像一个个物品,摆放在书架上,像这样: 我的思路比较简单,重载GridView,在他绘制子视图前,先把背景绘制完成 1 2 3 4 5 6 7 8 9 10 11 12 ...
- 浅谈android的selector,背景选择器
shape和selector的结合使用 (2013-04-07 11:11:00) 转载▼ 分类: android 1.Shape (1)作用:XML中定义的几何形状 (2)位置:res/draw ...
- ANDROID SHAPE画圆形背景_ANDROID实现角标布局
ANDROID SHAPE画圆形背景_ANDROID实现角标布局 <?xml version="1.0" encoding="UTF-8"?> &l ...
- 更改Android Studio的主题背景
看到别人炫酷的主题,好奇心使然,想要选择一个自己喜欢的炫酷背景,于是乎百度,动手尝试更换各种主题. 保存下来,留着以后想换主题的时候看. 1.Android Studio自带主题 File -> ...
- android实现点击背景图片不同区域实现不同事件
有时候我们拿到一张背景图片,客户要求点击图片的不同区域去跳转或者实现不同的操作事件.我们首先要确认图片的点击区域,往往我们会在布局文件那里下手,但是这样不好做适配,所以我实现了以下方法,基本功能可以实 ...
- android 项目中设置背景图片
xml文件设置背景图片中:任意一个控件,button imageView 或layout,在其的xml属性设置中,添加 [XML] view plaincopy android:background= ...
随机推荐
- Oracle创建表和创建序列和修改,增加sql字段
一.创建表 create table y_parts_classify( pt_id number(10) not null, pt_name varchar2(1000), update_time ...
- 多线程编程-- part 6 共享锁和ReentrantReadWriteLock
介绍: ReadWriteLock,顾名思义,是读写锁.它维护了一对相关的锁 — — “读取锁”和“写入锁”,一个用于读取操作,另一个用于写入操作.(1)“读取锁”用于只读操作,它是“共享锁”,能同时 ...
- Nginx请求限制配置
Nginx请求限制配置 请求限制可以通过两种方式来配置,分别是 连接频率限制和请求频率限制 首先我们要知道什么是http请求和连接,浏览器和服务端首先通过三次握手完成连接,然后发起请求,传输请求参数 ...
- lambda中FirstOrDefault和First
First()表示取集合中的第一个元素,如果集合为空,则抛异常. FirstOrDefault()表示取集合的第一个元素. 如果集合为空,且集合元素是引用类型,则返回null. 如果集合为空,且集合元 ...
- python 读excel表操作
import xlrd # 打开文件 data = xlrd.open_workbook('测试表.xlsx') # 查看工作表 data.sheet_names() print("shee ...
- Linux三剑客:grep、awk、sed
---------------------------------------------------------------------------------------------------- ...
- PAT Basic 1009 说反话 (20 分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...
- springboot中使用拦截器
5.1 回顾SpringMVC使用拦截器步骤 自定义拦截器类,实现HandlerInterceptor接口 注册拦截器类 5.2 Spring Boot使用拦截器步骤 5.2.1 按照S ...
- LCA-tarjan understand
首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点. 换句话说,就是两个点在这棵 ...
- JavaScript This 的六道坎
鉴于this风骚的运作方式,对this的理解是永不过时的话题,本文试图通过将其大卸六块来钉住这个磨人的妖精. 首先 this is all about context. this说白了就是找大佬,找拥 ...