gpt4 book ai didi

android - 用圆角背景 mask ImageView

转载 作者:IT老高 更新时间:2023-10-28 21:45:09 25 4
gpt4 key购买 nike

我有一个 Custom ListView,其中包含一个 ImageViewTextView。一切正常。

我想要的是显示在列表中的图像在圆角。从 Web 服务我得到矩形形状的图像。但我想在圆角 ImageView 中显示它,如下所示。

enter image description here

谁能告诉我如何掩盖圆角的图像?

我已经尝试通过创建如下可绘制文件并将其应用为 ImageView 中的 src。但没有什么对我有用。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="oval" >
<solid android:color="#FFFFFF" />
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp" />
<corners android:radius="5dp" />
</shape>
</item>
<item>
<shape android:shape="oval" >
<padding
android:bottom="5dp"
android:left="5dp"
android:right="5dp"
android:top="5dp" />
<solid android:color="#FFFFFF" />
</shape>
</item>
</layer-list>

已编辑:

enter image description here

我已经申请了以下解决方案:

<FrameLayout
android:id="@+id/imagemaskframe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp" >

<ImageView
android:id="@+id/op_ivpic"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center"
android:scaleType="fitXY" />

<ImageView
android:id="@+id/iv_mask_op"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/imgmask" />

</FrameLayout>

最佳答案

最好的方法是在 Canvas 中使用 PorterDuff 操作和/或 Shaders。假设您的 Bitmap 可用并存储在 mBitmap 中。

选项 1:使用着色器。

@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);

// Load the bitmap as a shader to the paint.
final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
final Shader shader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
paint.setShader(shader);

// Draw a circle with the required radius.
final float halfWidth = canvas.getWidth()/2;
final float halfHeight = canvas.getHeight()/2;
final float radius = Math.max(halfWidth, halfHeight);
canvas.drawCircle(halfWidth, halfHeight, radius, paint);
}

选项 2:使用 PorterDuff 模式。

@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);

// Create a circular path.
final float halfWidth = canvas.getWidth()/2;
final float halfHeight = canvas.getHeight()/2;
final float radius = Math.max(halfWidth, halfHeight);
final Path path = new Path();
path.addCircle(halfWidth, halfHeight, radius, Path.Direction.CCW);

final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawPath(path, paint);
}

注意:

  1. 在 onDraw() 调用中创建对象并不好。因此,您最初应该将您的油漆和着色器放在其他地方。当您将图像位图设置为 View 时,这可能会完成。
  2. Canvas 在没有硬件纹理支持时可能需要保存和恢复。这里没有提到围绕它的一般想法。
  3. 记得在构造函数中添加 setWillNotDraw(false);

其他引用资料:

  1. https://sriramramani.wordpress.com/2012/12/21/shaders/有关于 Shaders 的信息。
  2. http://mxr.mozilla.org/mozilla-central/source/mobile/android/base/ShapedButton.java在 Firefox for Android 中使用 Path 来弯曲按钮。
  3. http://sriramramani.wordpress.com/2012/08/27/constructing-squishy-buttons/包含有关 Canvas 保存、恢复和 ICS 之前的特殊情况的信息。

关于android - 用圆角背景 mask ImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18527467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com