Android 9.0 修改默认自适应图标形状(Adaptive icon)

framework android
一、我们可以在Launcher3中找到默认图标形状的配置,可以看到默认配置的几个图标形状,这个地方并不能修改默认图标的形状,因为icon_shape_system_default对应的值为空。

    M50,0L100,0 100,100 0,100 0,0z
    M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z
    M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0
    M50,0A50,50,0,0 1 100,50 L100,85 A15,15,0,0 1 85,100 L50,100 A50,50,0,0 1 50,0z



    
    @string/icon_shape_system_default
    @string/icon_shape_square
    @string/icon_shape_squircle
    @string/icon_shape_circle
    @string/icon_shape_teardrop

二、从绘制Adaptive icon的地方入手,找到AdaptiveIconDrawable.java,路径如下:

./base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java

查看其构造方法:

/**
* The one constructor to rule them all. This is called by all public
* constructors to set the state and initialize local properties.
*/
AdaptiveIconDrawable(@Nullable LayerState state, @Nullable Resources res) {
mLayerState = createConstantState(state, res);

    if (sMask == null) {
        sMask = PathParser.createPathFromPathData(
            Resources.getSystem().getString(R.string.config_icon_mask));
    }
    mMask = PathParser.createPathFromPathData(
        Resources.getSystem().getString(R.string.config_icon_mask));
    mMaskMatrix = new Matrix();
    mCanvas = new Canvas();
    mTransparentRegion = new Region();
}

可以看到用到了config_icon_mask 字段,该字段是在framework中配置的,大概意思就是通过config_icon_mask来获取对应的icon shape.

三、查看android/frameworks/base/core/res/res/values/config.xml 中的config_icon_mask值

"M50,0L92,0C96.42,0 100,4.58 100 8L100,92C100, 96.42 96.42 100 92 100L8 100C4.58, 100 0 96.42 0 92L0 8 C 0 4.42 4.42 0 8 0L50 0Z"

可以知道该值就是默认的adaptive icon的形状,我们把其值改为我们想要的值即可,值可以参考,launcher3中的配置,比如我们想改为正方形,就改为M50,0L100,0 100,100 0,100 0,0z 即可。

支持,android系统里面所有使用了adaptive icon 特性功能的,都会遵循这个规则。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值