Android实现个人资料页面头像背景模糊显示包(状态栏)
发布时间 - 2026-01-10 23:23:43 点击率:次最近要实现这样一个效果,然后拿出来与大家分享一下主要的几段代码,希望大家能够用到,与人方便自己方便嘛!
首先:
要实现的是浮动状态栏效果,通过在Activity的onCreate方法中调用这个方法,然后就可以让整个布局浮现在整个手机屏幕之下了,这是我觉着最简单的一种方法了。
public static void alphaTask(Activity context) {
context.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = context.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
window.setNavigationBarColor(Color.TRANSPARENT);
}
}
接下来:
获得状态栏高度,将actionbar(我这里是自己在布局当中写的,然后在代码中设置他距离顶部的高度让他看起来和我们的bar没有什么区别)的位置改变位于状态来的下方
public static int getStatusBarHight(Context context) {
/**
* 获取状态栏高度——方法1
* */
int statusBarHeight = -1;
//获取status_bar_height资源的ID
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
//根据资源ID获取响应的尺寸值
statusBarHeight = context.getResources().getDimensionPixelSize(resourceId);
}
// int i = DensityUtil.px2dip(context, statusBarHeight);
return statusBarHeight;
}
最后:
实现背景高斯模糊效果的
public class FastBlurUtils {
public static Bitmap doBlur(Bitmap sentBitmap, int radius,
boolean canReuseInBitmap) {
Bitmap bitmap;
if (canReuseInBitmap) {
bitmap = sentBitmap;
} else {
bitmap = sentBitmap.copy(sentBitmap.getConfig(), true);
}
if (radius < 1) {
return (null);
}
int w = bitmap.getWidth();
int h = bitmap.getHeight();
int[] pix = new int[w * h];
bitmap.getPixels(pix, 0, w, 0, 0, w, h);
int wm = w - 1;
int hm = h - 1;
int wh = w * h;
int div = radius + radius + 1;
int r[] = new int[wh];
int g[] = new int[wh];
int b[] = new int[wh];
int rsum, gsum, bsum, x, y, i, p, yp, yi, yw;
int vmin[] = new int[Math.max(w, h)];
int divsum = (div + 1) >> 1;
divsum *= divsum;
int dv[] = new int[256 * divsum];
for (i = 0; i < 256 * divsum; i++) {
dv[i] = (i / divsum);
}
yw = yi = 0;
int[][] stack = new int[div][3];
int stackpointer;
int stackstart;
int[] sir;
int rbs;
int r1 = radius + 1;
int routsum, goutsum, boutsum;
int rinsum, ginsum, binsum;
for (y = 0; y < h; y++) {
rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
for (i = -radius; i <= radius; i++) {
p = pix[yi + Math.min(wm, Math.max(i, 0))];
sir = stack[i + radius];
sir[0] = (p & 0xff0000) >> 16;
sir[1] = (p & 0x00ff00) >> 8;
sir[2] = (p & 0x0000ff);
rbs = r1 - Math.abs(i);
rsum += sir[0] * rbs;
gsum += sir[1] * rbs;
bsum += sir[2] * rbs;
if (i > 0) {
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
} else {
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
}
}
stackpointer = radius;
for (x = 0; x < w; x++) {
r[yi] = dv[rsum];
g[yi] = dv[gsum];
b[yi] = dv[bsum];
rsum -= routsum;
gsum -= goutsum;
bsum -= boutsum;
stackstart = stackpointer - radius + div;
sir = stack[stackstart % div];
routsum -= sir[0];
goutsum -= sir[1];
boutsum -= sir[2];
if (y == 0) {
vmin[x] = Math.min(x + radius + 1, wm);
}
p = pix[yw + vmin[x]];
sir[0] = (p & 0xff0000) >> 16;
sir[1] = (p & 0x00ff00) >> 8;
sir[2] = (p & 0x0000ff);
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
rsum += rinsum;
gsum += ginsum;
bsum += binsum;
stackpointer = (stackpointer + 1) % div;
sir = stack[(stackpointer) % div];
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
rinsum -= sir[0];
ginsum -= sir[1];
binsum -= sir[2];
yi++;
}
yw += w;
}
for (x = 0; x < w; x++) {
rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
yp = -radius * w;
for (i = -radius; i <= radius; i++) {
yi = Math.max(0, yp) + x;
sir = stack[i + radius];
sir[0] = r[yi];
sir[1] = g[yi];
sir[2] = b[yi];
rbs = r1 - Math.abs(i);
rsum += r[yi] * rbs;
gsum += g[yi] * rbs;
bsum += b[yi] * rbs;
if (i > 0) {
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
} else {
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
}
if (i < hm) {
yp += w;
}
}
yi = x;
stackpointer = radius;
for (y = 0; y < h; y++) {
// Preserve alpha channel: ( 0xff000000 & pix[yi] )
pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16)
| (dv[gsum] << 8) | dv[bsum];
rsum -= routsum;
gsum -= goutsum;
bsum -= boutsum;
stackstart = stackpointer - radius + div;
sir = stack[stackstart % div];
routsum -= sir[0];
goutsum -= sir[1];
boutsum -= sir[2];
if (x == 0) {
vmin[y] = Math.min(y + r1, hm) * w;
}
p = x + vmin[y];
sir[0] = r[p];
sir[1] = g[p];
sir[2] = b[p];
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
rsum += rinsum;
gsum += ginsum;
bsum += binsum;
stackpointer = (stackpointer + 1) % div;
sir = stack[stackpointer];
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
rinsum -= sir[0];
ginsum -= sir[1];
binsum -= sir[2];
yi += w;
}
}
bitmap.setPixels(pix, 0, w, 0, 0, w, h);
return (bitmap);
}
}
这里再加一个上圆形头像的工具,将图片转换为圆形,很方便的
/**
* 转换图片成圆形
* @param bitmap 传入Bitmap对象
* @return
*/
public static Bitmap toRoundBitmap(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
float roundPx;
float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;
if (width <= height) {
roundPx = width / 2;
top = 0;
bottom = width;
left = 0;
right = width;
height = width;
dst_left = 0;
dst_top = 0;
dst_right = width;
dst_bottom = width;
} else {
roundPx = height / 2;
float clip = (width - height) / 2;
left = clip;
right = width - clip;
top = 0;
bottom = height;
width = height;
dst_left = 0;
dst_top = 0;
dst_right = height;
dst_bottom = height;
}
Bitmap output = Bitmap.createBitmap(width,
height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect src = new Rect((int)left, (int)top, (int)right, (int)bottom);
final Rect dst = new Rect((int)dst_left, (int)dst_top, (int)dst_right, (int)dst_bottom);
final RectF rectF = new RectF(dst);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, src, dst, paint);
return output;
}
以上所述是小编给大家介绍的 Android实现个人资料页面头像背景模糊显示包括状态栏,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android 页面背景模糊
# android 状态栏高斯模糊
# android 仿QQ动态背景、视频背景的示例代码
# android换肤功能 如何动态获取控件中背景图片的资源id?
# Android实现动态切换组件背景的方法
# Android编程中聊天页面背景图片、标题栏由于键盘引起问题的解决方法
# Android studio实现动态背景页面
# 状态栏
# 小编
# 的是
# 让他
# 在此
# 下了
# 这是我
# 给大家
# 这样一个
# 希望大家
# 拿出来
# 大家分享
# 最简单
# 再加
# 转换为
# 很方便
# 所述
# 给我留言
# 感谢大家
# 就可以
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
如何挑选优质建站一级代理提升网站排名?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
如何在局域网内绑定自建网站域名?
如何在腾讯云免费申请建站?
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何在建站之星绑定自定义域名?
Python文本处理实践_日志清洗解析【指导】
C++用Dijkstra(迪杰斯特拉)算法求最短路径
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何在香港服务器上快速搭建免备案网站?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
如何快速完成中国万网建站详细流程?
Laravel PHP版本要求一览_Laravel各版本环境要求对照
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
高端云建站费用究竟需要多少预算?
微信小程序 闭包写法详细介绍
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
*服务器网站为何频现安全漏洞?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
如何快速查询网址的建站时间与历史轨迹?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
高性能网站服务器配置指南:安全稳定与高效建站核心方案
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
焦点电影公司作品,电影焦点结局是什么?
如何在建站主机中优化服务器配置?
用v-html解决Vue.js渲染中html标签不被解析的问题
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
使用Dockerfile构建java web环境
如何在云服务器上快速搭建个人网站?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Windows Hello人脸识别突然无法使用
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
C++时间戳转换成日期时间的步骤和示例代码
jquery插件bootstrapValidator表单验证详解
中山网站推广排名,中山信息港登录入口?
如何在宝塔面板中创建新站点?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
个人摄影网站制作流程,摄影爱好者都去什么网站?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)

