如何为快捷方式制作圆形图标

时间:2019-12-19 19:25:14

标签: android android-static-shortcuts android-dynamic-shortcuts

我正在尝试将Android快捷方式添加到应用程序中,包括动态快捷方式和图标,它们将从位图创建。现在看起来像这样:

enter image description here

如您所见,动态快捷方式图标的中心有一个正方形图像,但是我需要它占用图标的所有空间,因此不会有白色背景。 代码:

Bitmap interlocutorAvatar = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_conference);
ShortcutInfo shortcutInfo = new ShortcutInfo.Builder(context, peer.getId())
                        .setLongLabel("Dynamic shortcut")
                        .setShortLabel("Dynamic")
                        .setIcon(Icon.createWithBitmap(interlocutorAvatar))
                        .setIntent(new Intent(Intent.ACTION_VIEW).setClass(context, VCEngine.appInfo().getActivity(ActivitySwitcher.ActivityType.CHAT))
                                .putExtra(CustomIntent.EXTRA_PEER_ID, peer.getId())
                                .putExtra(CustomIntent.EXTRA_CHAT_ID, peer.getId()))
                        .build();

2 个答案:

答案 0 :(得分:0)

添加到要在xml文件中加载图像的imageView

android:scaleType="centerCrop"

答案 1 :(得分:0)

我想我已经找到了一种可能的解决方案,那就是使用自适应图标。在我看来,这有点不可思议,但是只要有效就可以了。 我已经使用了AdaptiveIconDrawable,这是怎么做的:

  1. 我们需要将快捷方式图标的位图转换为BitmapDrawable。
  2. 我们创建一个AdaptiveIconDrawable并将BitmapDrawable传递给它。
  3. 然后我们创建另一个位图,并在其画布上绘制AdaptiveIconDrawable,从而将AdaptiveIconDrawable转换回Bitmap(我猜是自适应位图?)
  4. 最后,我们使用 Icon.createWithAdaptiveBitmap 方法设置快捷方式图标

将位图转换为自适应位图的代码:

@RequiresApi(api = Build.VERSION_CODES.O)
    public static Bitmap convertBitmapToAdaptive(Bitmap bitmap, Context context) {
        Drawable bitmapDrawable = new BitmapDrawable(context.getResources(), bitmap);
        AdaptiveIconDrawable drawableIcon = new AdaptiveIconDrawable(bitmapDrawable, bitmapDrawable);
        Bitmap result = Bitmap.createBitmap(drawableIcon.getIntrinsicWidth(), drawableIcon.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(result);
        drawableIcon.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawableIcon.draw(canvas);
        return result;
    }

然后您可以像这样设置快捷方式的图标:

setIcon(Icon.createWithAdaptiveBitmap(convertBitmapToAdaptive(yourBitmap, context)))