首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android上显示特定版本的自适应图标为ImageView

在Android上显示特定版本的自适应图标为ImageView
EN

Stack Overflow用户
提问于 2020-06-28 01:25:33
回答 1查看 261关注 0票数 2

当在安卓的活动中为ImageView添加自适应图标时,它似乎采用了与原始设备制造商设计相同的版本。在我的例子中,现在是四舍五入的版本。但我想在我的主活动中将其显示为图标,因此希望使用例如圆角的正方形版本。如果这是可能的,我如何实现这一点?如果这是不可能的,我可以创建一个新的资源,但它需要使用ic_launcher_backgroundic_launcher_foreground,这样图标就不会在多个地方定义。

这是我的ic_launcher.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@drawable/ic_launcher_background" />
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

这是我的ImageView

代码语言:javascript
运行
复制
<ImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@mipmap/ic_launcher" />
EN

回答 1

Stack Overflow用户

发布于 2020-08-11 20:07:20

在直接讲述解决方案之前,您应该知道系统如何在图像视图中绘制自适应图标。它主要包含三个步骤。

使用蒙版绘制透明区域background.

  • Draw a foreground.

  • Set a

如果您将自适应图标放入ImageView,则此步骤将自动完成。因此,上面将有一个系统定义的掩码。所以你的问题是如何在那里绘制一个定制的蒙版。然后让我们看看如何实现这一点。

  1. 获取自适应可绘制内容及其图层。

代码语言:javascript
运行
复制
    Drawable rawDrawable = getResources().getDrawable(R.mipmap.ic_launcher, null);
    Drawable foreground = rawDrawable.getForeground();
    Drawable background = rawDrawable.getBackground();

  1. 创建自定义大小的位图。

代码语言:javascript
运行
复制
    Bitmap bitmap = Bitmap.createBitmap(bitmapSize, bitmapSize, Bitmap.Config.ARGB_8888);

  1. 创建用于绘制可绘制图层的Canvas

代码语言:javascript
运行
复制
    Canvas canvas = new Canvas(bitmap);

  1. 绘制层。

代码语言:javascript
运行
复制
    background.setBounds(0, 0, bitmapSize, bitmapSize);
    background.draw(canvas);
    foreground.setBounds(0, 0, bitmapSize, bitmapSize);
    foreground.draw(canvas);

  1. 在执行完步骤4后,您将获得一个方形版本的图标。如果你需要添加圆角的话。你需要自己画面具。

代码语言:javascript
运行
复制
    Bitmap maskBitmap = Bitmap.createBitmap(bitmapSize, bitmapSize, Bitmap.Config.ARGB_8888);
    Canvas maskCanvas = new Canvas(maskBitmap);

    Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    xferPaint.setStyle(Paint.Style.FILL_AND_STROKE);
    xferPaint.setColor(Color.RED);
    maskCanvas.drawRoundRect(0,0,bitmapSize, bitmapSize, 12, 12, xferPaint);

    xferPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
    canvas.drawBitmap(maskBitmap, 0, 0, xferPaint);

然后

  1. 将位图放入ImageView

代码语言:javascript
运行
复制
    ((ImageView) findViewById(R.id.imageView)).setImageBitmap(bitmap);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62613293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档