繁体   English   中英

Android - ImageView 只有一个圆角

[英]Android - ImageView with rounded only one corner

我想像这样创建 ImageView (图像右侧):

在此处输入图像描述

我在 CardView 布局中有它,所以我有卡片的圆角,但我需要单独创建图像的圆角左下角(或右上角)。

我尝试了几个选项,但没有一个能正常工作。

我怎样才能做到这一点? 你有什么诀窍吗?

您可以使用材料组件库
1.2.0-alpha03版本中,有新的ShapeableImageView

只需在您的布局中使用:

  <com.google.android.material.imageview.ShapeableImageView
      app:srcCompat="@drawable/..."
      ../>

并在您的代码中应用ShapeAppearanceModel

float radius = getResources().getDimension(R.dimen.default_corner_radius);
imageView.setShapeAppearanceModel(imageView.getShapeAppearanceModel()
    .toBuilder()
    .setTopRightCorner(CornerFamily.ROUNDED,radius)
    .setBottomLeftCorner(CornerFamily.ROUNDED,radius)
    .build());

在此处输入图像描述

您可以使用此库并将 ImageView 放入 Layout

https://github.com/JcMinarro/RoundKornerLayouts

并且可以像这样设置特定角的半径

containerLayout.setCornerRadius(2f, CornerType.ALL);
containerLayout.setCornerRadius(2f, CornerType.BOTTOM_LEFT);

其他选择

public final enum class CornerType private constructor() : kotlin.Enum<com.jcminarro.roundkornerlayout.CornerType> {
    ALL,

    TOP_LEFT,

    TOP_RIGHT,

    BOTTOM_RIGHT,

    BOTTOM_LEFT;
}

尝试这个:

<androidx.cardview.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    app:cardCornerRadius="20dp">

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_gravity="top|right"
        android:scaleType="fitXY"
        android:src="@drawable/person" />
</androidx.cardview.widget.CardView>

在您的活动中:

 ImageView image = findViewById(R.id.image_view);
        Bitmap bitImg = BitmapFactory.decodeResource(getResources(),
                R.drawable.person);
        image.setImageBitmap(createRoundedRectBitmap(bitImg, 0, 20, 0, 20));
    }


    private static Bitmap createRoundedRectBitmap(@NonNull Bitmap bitmap, float topLeftCorner, float topRightCorner, float bottomRightCorner,
                                                  float bottomLeftCorner) {

        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);


        final int color = Color.WHITE;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        final RectF rectF = new RectF(rect);
        Path path = new Path();
        float[] radii = new float[]{
                topLeftCorner, bottomLeftCorner,
                topRightCorner, topRightCorner,
                bottomRightCorner, bottomRightCorner,
                bottomLeftCorner, bottomLeftCorner
        };

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        path.addRoundRect(rectF, radii, Path.Direction.CW);
        canvas.drawPath(path, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);
        return output;
    }

这很简单,只需制作可绘制资源文件text_logo_fix.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#fff"/>
    <corners android:bottomLeftRadius="30dp" android:topRightRadius="30dp"/>
</shape>

并在 ImageView 属性android:background中设置此可绘制文件

<ImageView
            android:id="@+id/imageView"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@drawable/herenamedrawableresourcefile"
            android:layout_gravity="center_horizontal"
            android:src="@drawable/text_logo_fix" />

或者你可以看起来像这样

<LinearLayout
            android:padding="10dp"
            android:layout_marginTop="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/herenamedrawableresourcefile">
            <ImageView
                android:id="@+id/imageView"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:layout_gravity="center_horizontal"
                android:src="@drawable/text_logo_fix" />
        </LinearLayout>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM