导航:首页 > 操作系统 > android实现毛玻璃

android实现毛玻璃

发布时间:2022-05-16 23:27:42

A. 怎么用shader实现UI的毛玻璃效果

Shader "Custom/WaterBlur" {
Properties {
_blurSizeXY("BlurSizeXY", Range(0,10)) = 2
}
SubShader {
// Draw ourselves after all opaque geometry
Tags { "Queue" = "Transparent" }
// Grab the screen behind the object into _GrabTexture
GrabPass { }
// Render the object with the texture generated above
Pass {
CGPROGRAM
#pragma debug
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0
sampler2D _GrabTexture : register(s0);
float _blurSizeXY;
struct data {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f {
float4 position : POSITION;
float4 screenPos : TEXCOORD0;
};
v2f vert(data i){
v2f o;
o.position = mul(UNITY_MATRIX_MVP, i.vertex);
o.screenPos = o.position;
return o;
}
half4 frag( v2f i ) : COLOR
{
float2 screenPos = i.screenPos.xy / i.screenPos.w;
float depth= _blurSizeXY*0.0005;
screenPos.x = (screenPos.x + 1) * 0.5;
screenPos.y = 1-(screenPos.y + 1) * 0.5;
half4 sum = half4(0.0h,0.0h,0.0h,0.0h);
sum += tex2D( _GrabTexture, float2(screenPos.x-5.0 * depth, screenPos.y+5.0 * depth)) * 0.025;
sum += tex2D( _GrabTexture, float2(screenPos.x+5.0 * depth, screenPos.y-5.0 * depth)) * 0.025;
sum += tex2D( _GrabTexture, float2(screenPos.x-4.0 * depth, screenPos.y+4.0 * depth)) * 0.05;
sum += tex2D( _GrabTexture, float2(screenPos.x+4.0 * depth, screenPos.y-4.0 * depth)) * 0.05;
sum += tex2D( _GrabTexture, float2(screenPos.x-3.0 * depth, screenPos.y+3.0 * depth)) * 0.09;
sum += tex2D( _GrabTexture, float2(screenPos.x+3.0 * depth, screenPos.y-3.0 * depth)) * 0.09;
sum += tex2D( _GrabTexture, float2(screenPos.x-2.0 * depth, screenPos.y+2.0 * depth)) * 0.12;
sum += tex2D( _GrabTexture, float2(screenPos.x+2.0 * depth, screenPos.y-2.0 * depth)) * 0.12;
sum += tex2D( _GrabTexture, float2(screenPos.x-1.0 * depth, screenPos.y+1.0 * depth)) * 0.15;
sum += tex2D( _GrabTexture, float2(screenPos.x+1.0 * depth, screenPos.y-1.0 * depth)) * 0.15;
sum += tex2D( _GrabTexture, screenPos-5.0 * depth) * 0.025;
sum += tex2D( _GrabTexture, screenPos-4.0 * depth) * 0.05;
sum += tex2D( _GrabTexture, screenPos-3.0 * depth) * 0.09;
sum += tex2D( _GrabTexture, screenPos-2.0 * depth) * 0.12;
sum += tex2D( _GrabTexture, screenPos-1.0 * depth) * 0.15;
sum += tex2D( _GrabTexture, screenPos) * 0.16;
sum += tex2D( _GrabTexture, screenPos+5.0 * depth) * 0.15;
sum += tex2D( _GrabTexture, screenPos+4.0 * depth) * 0.12;
sum += tex2D( _GrabTexture, screenPos+3.0 * depth) * 0.09;
sum += tex2D( _GrabTexture, screenPos+2.0 * depth) * 0.05;
sum += tex2D( _GrabTexture, screenPos+1.0 * depth) * 0.025;
return sum/2;
}
ENDCG
}
}
Fallback Off
}

B. ios开发中怎么实现毛玻璃效果

所谓的毛玻璃效果其实是半透明+模糊,可以用CSSfilter实现。时间不多,就抛个砖,题主可以自己找一下文档和案例。filter-CSSdiv{-moz-filter:blur(5px);-webkit-filter:blur(5px);-o-filter:blur(5px);-ms-filter:blur(5px);filter:blur(5px);}大体思路是,当出现弹出层的时候,对背景层增加blurfilter,再给弹出层的一定透明度就可以了。

C. android app开发中常用到哪些开源框架

在前面的课程中,随着对Android体系的了解,已经可以进行正常的Android应用开发了。在Android开发中,同其他工程开发一样,也经常使用一些提高效率的框架,本文我们做一个对比。这些框架,既包括:网络请求框架、也包括图片加载库框架、还包括数据库操作等一些框架,总之,了解和熟悉这些框架,会对自己的开发效率有很大的提升和帮助。

网络请求框架

1、okHttp

在前文的学习中,我们已经了解过okHttp,是一个常用的网络加载库。

2、Retrofit

介绍

Retrofit是一个很不错的网络请求库,该库是square开源的另外一个库,之前的okhttp也是该公司开源的。

Retrofit是基于OkHttp封装的RESTful网络请求框架,使用注解的方式配置请求。优点是速度快,使用注解,callback函数返回结果自动包装成java对象。官方自己的介绍说:

A type-safe REST client for Android and Java

该网络框架在github上的地址如下:https://square.github.io/retrofit/

要求

Retrofit支持的http方式方式包括 GET/POST/PUT/DELETE/HEAD/PATCH,Retrofit要求Java的版本是1.8+,Android应用的API版本应该在21+。

依赖

使用Retrofit库,和其他库一样,首先需要设置依赖,依然是在build.gradle文件中设置依赖:

//添加retrofit库依赖

implementation ‘com.squareup.retrofit2:retrofit:2.1.0’

//添加gson转换器

implementation ‘com.squareup.retrofit2:converter-gson:2.1.0’

使用

通过一个例子,我们可以来演示该框架的使用步骤:

1、定义请求接口,即程序中都需要什么请求操作
public interface HttpServices {

/**

D. android 实现毛玻璃透明效果有几种方法

1、如果系统的api在16以上,可以使用系统提供的方法直接处理图片

复制代码代码如下:

if (VERSION.SDK_INT > 16) {
Bitmap bitmap = sentBitmap.(sentBitmap.getConfig(), true);

final RenderScript rs = RenderScript.create(context);
final Allocation input = Allocation.createFromBitmap(rs, sentBitmap, Allocation.MipmapControl.MIPMAP_NONE,
Allocation.USAGE_SCRIPT);
final Allocation output = Allocation.createTyped(rs, input.getType());
final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
script.setRadius(radius /* e.g. 3.f */);
script.setInput(input);
script.forEach(output);
output.To(bitmap);
return bitmap;
}

2、 如果Api条件不满足,可以使用如下方法

复制代码代码如下:

@SuppressLint("NewApi")
public static Bitmap fastblur(Context context, Bitmap sentBitmap, int radius) {

Bitmap bitmap = sentBitmap.(sentBitmap.getConfig(), true);
if (radius < 1) {
return (null);
}
int w = bitmap.getWidth();
int h = bitmap.getHeight();
int[] pix = new int[w * h];
// Log.e("pix", w + " " + h + " " + pix.length);
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 temp = 256 * divsum;
int dv[] = new int[temp];
for (i = 0; i < temp; 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;
}
}
// Log.e("pix", w + " " + h + " " + pix.length);
bitmap.setPixels(pix, 0, w, 0, 0, w, h);
return (bitmap);
}

E. 如何评价一加3发布的基于Android 7.0的氢OS

氢OS:离开CM/ColorOS后如何用的爽?王建2015-05-29一加氢OS用的爽访问:17055分享到刘作虎说:想了解我个人喜好的可以看一下氢系统,里面都是我喜欢的。相信对于一个认真做智能手机的品牌来说,系统UI这个占据旗下手机核心竞争力的一部分,是没有谁愿意将其托付于他人之手的。所以在时隔一加手机发布400天之后,刘作虎再次登台发布了一个他喜欢的,也认为将是用户喜欢的自家定制系统——氢OS,简单合理地解决了没有自家系统的尴尬。这也是一加在"手感爽“之后再次提出了一个“用着爽”。刘作虎认为目前多数安卓定制系统都进入了一个“iOS化”的误区,无论是“四海皆准”的圆角矩形图标,还是毛玻璃效果,再到删除LOGO时的抖动效果,很多厂商都是在安卓的基础上努力构建一个近似iOS的模样。iOS固然出色,但是也背离了安卓系统本身,所以氢OS的设计方向将绝不“iOS化”。那它是什么样的?界面设计也许为了让在场观众能够深刻理解氢OS的设计与高雅艺术是有着何等同源的关系,台上从西班牙归来的产品经理花了大量的时间讲述了氢OS设计的艺术源头。但是就小编个人的感觉而言,在场的观众多数只是感受到了产品经理想要阐述氢OS很漂亮的意思。氢OS氢OS的确很漂亮。相对于一些其他的国产安卓定制系统来说,氢OS的设计风格与它所基于的安卓5.0还是有着较高的吻合度的。而对于设计理念而言,一加称之为“氢表达”.虽然氢OS产品经理在阐述设计理念时表示“单纯地用拟物或是扁平来形容一个手机OS显然是不够的”,从展示的图标上来看,氢OS的图标风格还是比较扁平化的,线条形状颜色比较简洁明亮,近似于原生安卓的感觉。同时作为反抗“iOS化”的一部分,氢OS将图标设计成写实风格,功能表现十分明显。氢视窗——33%的自由氢OS针对虎哥苦恼的,不能用在桌面上看到完整照片的问题,氢OS给出的答案是33%的自由,也就是位于屏幕上方的氢视窗。用户可以在这里使用自己喜欢的图片作为氢视窗的背景,而桌面的整体背景也将会随着这张图片而深化到全局。氢OS的联系人界面的联系人首字母显示经过设计后呈现出的是一种非常别致的效果,同时每个首字母的显示都有八种配色。而另一个非常贴心的设计是,在通讯录界面点击一位联系人之后,首先是相对主要的信息显示在屏幕下方手指可轻易触及的位置,向上滑动后再显示完整信息。而要让刘作虎挑选一个他最喜欢的氢OS界面,他一定会选择关机界面。首先是屏幕顶部显示渐变黑色,并只有关机一个按钮。而在下拉将黑色渲染至整个屏幕时,关机图标将逐渐消失,手机关机。而刘作虎为了让整体关机效果有一种近似于关灯睡觉的安静感,甚至去掉了常见的重启按键。氢OS的时钟界面,三个圆形的表盘分别代表着本地时间和用户设置的世界时间,白与黑则代表着昼与夜。这也是刘作虎特别喜欢的一个界面设计。交互/功能氢OS认为滑动是比点击更自然也更优雅的一种操作方式,而这种理念也贯穿在氢OS的设计之中。在下拉通知中心的设计上,氢OS与常规的安卓系统别无二致,不过在此下滑之后没下拉菜单的通知内容就会下滑到拇指可以轻易够到的位置,操作更加直观。奥,对了,双击Home键也能打开下拉通知中心。作为智能手机的系统,大量的APP在提供方便之余也造成了一定的麻烦,所有有了桌面上的文件夹将它们整理起来。而在氢OS里,文件夹又有了一定的创新。首先氢OS打开的文件夹是出现在屏幕的下半部分,更具创新性的是,在文件夹打开界面左右滑动即可实现文件夹之间的切换。高效通知对于无聊短信与轰炸般的APP通知,人们已经经受了太多的折磨,而氢OS又提出了另一种解决方式。卡片式短信和通知降噪。在氢OS里,枯燥无聊的通知短信可以转化为更加生动直观的卡片式,并继续点击可以实现的功能。同时,这些飞机票、火车票、团购券、电影券、代金券、验证码等等,变成“卡片式短信”后都会整合到氢视窗中。但是从发布会的情况来看,这项设计目前还只能支持部分与一加达成合作的服务商,不过可以相信的合作的范围会在将来逐渐扩大。另一个通知降噪则是将简单的允许关闭逻辑转变为将重要和想看的APP通知设置优先级,优先区域里的App通知会以统一的数字形式提醒,非优先区域App则不会被通知。最后,氢OS将允许用户进行Root,并且刷机后仍然提供保修。当然,目前在发布会上展示的氢OS还仅限于基本设计风格和特色功能上,尚不足以对氢OS的整体做任何,但是它不是已经让你很好奇,甚至是很期待了吗?

F. iOS和安卓的UI设计有什么区别

iOS与安卓设计上的差异主要从系统差异、成本考虑、用户习惯3个方面来阐述。
一. 系统差异

1. 物理按键对返回的影响

安卓的物理按键以及屏幕导航按键的差异是安卓的返回键更加方便,

iOS只有home键,随着全屏的出现,可能会打破这种差异。

因此在设计返回操作的时候需要考虑平台的差异性。
安卓比iOS增加了物理返回键、底部导航,有些设备可以隐藏底部导航。

全面屏的普及会慢慢打破这种因为物理按键造成的交互及设计差别,全面屏设计适配是要考虑底部按键的差异。

华为全面屏的几种手势:

安卓全面屏出现后,并没有完全舍弃内置导航按键,还有纯手势、悬浮按钮、内置导航条3种方式。随着硬件的发展,安卓和iOS的交互操作会更加趋同,改变这种差异。

返回浮窗的UI表现:

iOS 手机只有一个“Home ”键,为方便用户退出浮层需要增加了“取消”入口。

而 Android 手机本来就有“返回”虚拟键,所以多做一个“取消”的意义性不大。

2. 屏幕分辨率造成的色调选择

Material Design作为谷歌推出的全新的设计语言,和iOS对比,Material Design更加沉稳,iOS更加鲜艳。原因是因为iOS的屏幕分辨率更高,对鲜艳颜色的还原度更好,安卓适应的机型比较多,颜色还原度没有那么好。

深色模式下考虑到用户长期使用的体验,因iOS的还原度高,背景使用#000000,安卓分辨率的限制,文字颜色较浅,谷歌推荐背景色为#121212。有些平台护眼模式和深色模式用两套,比如网易云音乐。
. 软件更新方式的不同

Android :由于安卓的开源特性,当有新版本时都会提示用户更新,且每个产品内部都带有“版本更新”入口。

更新的方式可分2种:

引导更新:弹出提示让用户更新 APP ,用户点击“更新”按钮前往应用商店更新、或者在当前页面更新并显示下载进度。

强制更新:也是先提示用户更新,只不过用户点击“更新”按钮,即调起软件安装页面。
iOS :而 iOS 端出于对用户体验的考虑,UI设计中IOS和安卓的设计差异是禁止向用户提示版本更新信息的。这也是为什么绝大部分的 iOS 产品,都是没有“版本更新”入口的原因,即使有,点击了也直接跳转到 App Store 查看版本情况。
4. 切图标注

XHDPI对应的是安卓2倍图,XXHDPI对应的是安卓3倍图,iOS的3倍图和安卓的XXHDPI是一样的。
iOS用375*667px做设计,有些也用750*1334px,原因有3点:

①开发同学不用换算,直接采用1倍图就可以

②sketch切图时导出更加方便

③极大提高了视觉还原和其他机型的适配

安卓用1080*1920px做设计,原因有3点:

①从中间尺寸向上和向下适配的时,调整幅度最小,最方便适配

②大屏幕时代依然以小尺寸作为设计尺寸,会限制设计师的设计视角

③用主流尺寸做设计,极大提高视觉还原和机型适配

5. 键盘差异引发的搜索框样式

安卓键盘有些是系统自带的,也有第三方的,例如搜狗输入法,iOS更多是系统自带的键盘。
很多输入法在键盘的右侧加入了更加明显的搜索按键,但为了照顾一些用户的操作习惯,安卓还是把搜索放在了搜索框后面。
二. 成本考虑

1. 开发成本

loading

iOS的loading自定义更加常见、个性化强,安卓很多都是用系统自带的(转圈的那种),主要是考虑开发成本。

TAB样式

2个平台会有特有的控件样式。

安卓系统本身全局actionbar,若去实现其他的样式,会破坏整体的封装,开发成本更高。

iOS系统有自定义的tab切换样式,开发人员只需要更改颜色、圆角,更加方便。

高斯模糊

毛玻璃在iOS比较常见,安卓开发成本高,建议不做这种效果。

2. 商业成本

一般iOS会让用户承担30%的抽成,例如优酷、腾讯的VIP会员价格。

三. 用户习惯

1. 长按侧滑删除

信息列表的侧滑,在iOS中是很常见的操作,但是在安卓更习惯长按,如果改成侧滑删除,会增加用户的理解成本。
2. 图标设计

返回按钮:一般iOS返回不带横线“<”,安卓喜欢带有横线,例如下图,不过有些app会统一用一种。

分享按钮:一把iOS会采用苹果自带的向上的形式,安卓喜欢用三个圈圈(看下图)。
弹窗按钮:有些安卓弹窗上的按钮会遵循系统规则,在右侧这种形式,iOS更喜欢居中。

bar标题位置:安卓上的标题跟随着“返回”,在bar的左侧,iOS会喜欢放在中间。

G. 有谁做过android背景毛玻璃效果(类似小米桌面点开文件夹效果)

嗨!

这个你可以到MIUI论坛跟开发者交流下,

我觉得这个应该是动画效果

而且最新的安卓4.4原生已经支持了

H. 如何实现软件毛玻璃效果

windowsblinds里面有一款毛玻璃的主题,装WIN7前我就用的这个。

阅读全文

与android实现毛玻璃相关的资料

热点内容
用粘液做解压手套 浏览:327
icloud收信服务器地址 浏览:498
编程思考者 浏览:450
压缩机型号用什么氟利昂 浏览:553
农机空气压缩机 浏览:664
程序员下载歌曲 浏览:894
编译未检测到仿真器 浏览:807
压缩机每次启动12分钟就停 浏览:730
creo复制曲面命令 浏览:959
程序员恋上女硕士 浏览:669
ansys的get命令 浏览:988
国外dns苹果服务器地址 浏览:430
国家职业技术资格证书程序员 浏览:652
奇瑞租车app是什么 浏览:99
系统源码安装说明 浏览:420
命令行加壳 浏览:96
解压时显示防失效视频已加密 浏览:295
苹果短信加密发送 浏览:446
天翼私有云服务器租用 浏览:733
贵州云服务器属于哪个上市公司 浏览:59