如何在ImageView中为缩放图像添加圆角边框

时间:2017-08-03 16:33:12

标签: android

我的观点xml:

<ImageView
    android:id="@+id/imageView"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="@drawable/border"
    android:cropToPadding="true"
    android:padding="6dp"
    android:layout_margin="6dp" />

我的带有角落的drawbale xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke
        android:width="6dp"
        android:color="#191970" />
    <padding
        android:left="6dp"
        android:top="6dp"
        android:right="6dp"
        android:bottom="6dp" />
    <corners
        android:radius="8dp" />
</shape>

我的代码,我在其中添加图片并进行缩放:

mImageView = view.findViewById(R.id.imageView);
mImageView.setImageResource(mDeskCards.get(0).getDrawable()); // some .png file
mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
mImageView.setOnClickListener(this);

我拥有的东西与我需要的东西: https://i.stack.imgur.com/9WPI3.png

4 个答案:

答案 0 :(得分:0)

如果您在图像上放置带有可绘制xml的视图,您将获得正在寻找的圆角效果。

为了澄清,你应该有这样的事情:

<RelativeLayout
     .... >

    <ImageView
        .... />

    <RelativeLayout
        android:background="@drawable/my_drawable" />

</RelativeLayout>

答案 1 :(得分:0)

有多个库可以帮助您实现这一目标。我建议的是Glide。你会在网上找到很多教程。要做你想做的事,你可以使用这个代码

Glide.with(context).load(url).apply(RequestOptions.circleCropTransform()).into(mImageView);

答案 2 :(得分:0)

使用普通的ImageView,图像将始终以方角显示

我解决了它创建我自己的从View扩展的类,创建了一个剪切路径,并在onDraw中首先绘制边框,然后调用canvas.clipPath(myClipPath, Region.Op.INTERSECT);,然后绘制图像。这也适用于圆形或椭圆形边框。

如果边角半径很小且边框笔划粗,那么你可以尝试不剪裁:在onDraw中首先绘制图像,然后绘制边框。

已添加:

从ImageView派生一个类并使用类似的东西:

    private Path clipPath;
    private RectF rect;
    private float radius = 20;


    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        clipPath = new Path();
        rect = new RectF(0, 0, getWidth(), getHeight());
        clipPath.addRoundRect(rect, radius, radius, Path.Direction.CW);
    }


    @Override
    protected void onDraw(Canvas canvas) {
        canvas.clipPath(clipPath);
        super.onDraw(canvas);
    }

答案 3 :(得分:0)

您可以试用我的图书馆:PowerfulImageView 只需在布局中使用它而不是ImageView,并将形状设置为roundedRectangle或solidRoundedRectangle,您可以直接在xml(或通过Java)中选择边框的颜色,宽度和半径。

基本上,你的view.xml会变成:

<com.stefanosiano.powerfulimageview.PowerfulImageView
    android:id="@+id/imageView"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:cropToPadding="true"
    android:padding="6dp"
    android:layout_margin="6dp"
    app:piv_shape_mode="rounded_rectangle" />

如果您使用它,请告诉我:)