Android原生桌面顶部和底部的渐变阴影去除方法

Android原生的 Launcher ,会在桌面的顶部和底部加一个渐变阴影的效果。如下图:


      由于很多桌面都是基于原生桌面进行开发的,所以一些机型的手机上会保留有这个效果。个人猜测Google应该是考虑到状态栏的小图标是白色的,如果壁纸是浅色或白色,那么状态栏的小图标会很难认清,甚至看不见,所以加了这个一个效果。

      最近项目里接到一个需求,需要把这个渐变阴影的效果去掉。

      根据以往一些小小的经验,首先推测了下这个效果的实现方法。可以想到两种:

          1、在桌面的xml布局文件中使用<gradient>标签,用了 android:startColor 和 android:endColor 属性来实现渐变效果。

          2、可能Launcher在加载壁纸时,对壁纸图片进行了处理,直接在图片中加入了阴影效果。

      带着自己的推测,按照关键信息去查看源码。只能说,理想很丰满。没有用到以上两种方式。只能从代码清单入手,挑一些关键字重点浏览,搜索设置背景的相关方法。功夫不负有心人,

      在 packages/apps/Launcher3/src/com/android/launcher3/Launcher.java 中找到了相关方法 setWorkspaceBackground():

5.x 系统下:

private void setWorkspaceBackground(boolean workspace) {
     mLauncherView.setBackground(workspace ? mWorkspaceBackgroundDrawable : null);
}
6.0和7.0系统下的实现略有不同,但是换汤不换药:
private void setWorkspaceBackground(int background) {
    switch (background) {
        case WORKSPACE_BACKGROUND_TRANSPARENT:
            getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            break;
        case WORKSPACE_BACKGROUND_BLACK:
            getWindow().setBackgroundDrawable(null);
            break;
        default:
            // 实现阴影的代码
            getWindow().setBackgroundDrawable(mWorkspaceBackgroundDrawable);
    }
}
渐变效果的实现最终都是在壁纸的基础上,给launcher设置了一个 background 。该方法调用了图片资源: workspace_bg.9.png  :

mWorkspaceBackgroundDrawable = getResources().getDrawable(R.drawable.workspace_bg);
图片存放在packages/apps/Launcher3/res/ 各分辨率适配的目录下。
      去掉阴影可以有两种方法:
      1、直接注释掉 setWorkspaceBackground()中设置桌面background 的相关代码就行。
      2、要是不嫌麻烦,也可以将 workspace_bg.9.png 替换成全透明的图片。
      去掉渐变效果后,就是以下的样子:


      那么,问题来了。去掉渐变效果后,由于状态栏和壁纸都是浅色的,会导致状态栏的图标可视性(用户体验)较差。所以相应的可能就需要进行状态栏颜色的修改。请见《android修改状态栏颜色的实现》


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值