我正在创建一个应用程序,该应用程序获取手机上当前安装的所有应用程序的列表,并且试图获取该应用程序的方形图标。如果我执行以下操作:
getPackageManager().getApplicationIcon(thePackageName);
该图标会获取图标,但会根据设备上当前设置的样式(圆形,圆形等)显示。如果我更改了手机上的图标形状,则会获得应用了新形状的图标。有什么办法可以得到方形图标吗?
我也一直在尝试使用getDrawableForDensity()
可以与图标密度和主题配合使用的主题,我认为这可能是我追求的目标,但仍然无法按预期工作。
我已经找到了解决方案,尽管它可能不是最好的方法。如果没有Adaptive Mask,我将无法获得整个图标,因此我检查了Drawable是否为AdaptiveIconDrawable,然后提取了背景和前景并将它们都绘制到画布上以返回。
public Bitmap drawableToBitmap (Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable) drawable).getBitmap();
} else if ((Build.VERSION.SDK_INT >= 26)
&& (drawable instanceof AdaptiveIconDrawable)) {
AdaptiveIconDrawable icon = ((AdaptiveIconDrawable)drawable);
Drawable bg = icon.getBackground();
Drawable fg = icon.getForeground();
int w = icon.getIntrinsicWidth();
int h = icon.getIntrinsicHeight();
Bitmap result = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);
icon.setBounds(0, 0, w, h);
bg.draw(canvas);
if (fg instanceof Drawable) {
fg.draw(canvas);
}
return result;
}
float density = getBaseContext().getResources().getDisplayMetrics().density;
int defaultWidth = (int)(48* density);
int defaultHeight = (int)(48* density);
return Bitmap.createBitmap(defaultWidth, defaultHeight, Bitmap.Config.ARGB_8888);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句