如何在android中的自定义圆角图像视图中设置图像

时间:2016-03-15 07:13:48

标签: android android-layout uiimageview android-camera

你好我在Android相机应用程序中工作我想在圆角图像视图中显示点击图像我该如何实现这些。我发布了下面给出的图像。请帮助我吗?

Imageview看起来像这样

one

5 个答案:

答案 0 :(得分:6)

使用下面的自定义ImageView类。

public class RoundedImageView extends ImageView {
    private Path mMaskPath;
    private Paint mMaskPaint    = new Paint(Paint.ANTI_ALIAS_FLAG);
    private int mCornerRadius   = 10;

    public RoundedImageView(Context context) {
        super(context);

        init(context);
    }

    public RoundedImageView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);

        init(context);
    }

    public RoundedImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        init(context);
    }

    private void init(Context context) {
        ViewCompat.setLayerType(this, ViewCompat.LAYER_TYPE_SOFTWARE, null);
        mMaskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        mMaskPaint.setColor(context.getResources().getColor(R.color.transparent));

        mCornerRadius = (int) context.getResources().getDimension(R.dimen.image_border_curvature);
    }

    /**
     * Set the corner radius to use for the RoundedRectangle.
     */
    public void setCornerRadius(int cornerRadius) {
        mCornerRadius = cornerRadius;
        generateMaskPath(getWidth(), getHeight());
        invalidate();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldW, int oldH) {
        super.onSizeChanged(w, h, oldW, oldH);

        if (w != oldW || h != oldH) {
            generateMaskPath(w, h);
        }
    }

    private void generateMaskPath(int w, int h) {
        mMaskPath = new Path();
        mMaskPath.addRoundRect(new RectF(0,0,w,h), mCornerRadius, mCornerRadius, Path.Direction.CW);
        mMaskPath.setFillType(Path.FillType.INVERSE_WINDING);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if(canvas.isOpaque()) { // If canvas is opaque, make it transparent
            canvas.saveLayerAlpha(0, 0, canvas.getWidth(), canvas.getHeight(), 255, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
        }

        super.onDraw(canvas);

        if(mMaskPath != null) {
            canvas.drawPath(mMaskPath, mMaskPaint);
        }
    }
}

在xml中使用此ImageView。

答案 1 :(得分:1)

不要自己尝试,而是使用像this这样的库来达到目的。它有不同的形状,效果很好。

依赖于应用程序的build.gradle添加此行:

compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'

同步gradle,现在您的应用已经了解了库。现在使用下面的代码将其添加到您的布局:

<com.github.siyamed.shapeimageview.BubbleImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/neo"
app:siArrowPosition="right"
app:siSquare="true"/>

按照库页面进行更多自定义。

答案 2 :(得分:1)

我使用这个库https://github.com/vinc3m1/RoundedImageView超过两年,我很高兴。您只需在build.gradle

中添加此行即可
dependencies {
    compile 'com.makeramen:roundedimageview:2.2.1'
}

并像这样定义您的RoundedImageView小部件

<com.makeramen.roundedimageview.RoundedImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/imageView1"
        android:src="@drawable/photo1"
        android:scaleType="fitCenter"
        app:riv_corner_radius="30dip"
        app:riv_border_width="2dip"
        app:riv_border_color="#333333"
        app:riv_mutate_background="true"
        app:riv_tile_mode="repeat"
        app:riv_oval="true" />

和voala你准备好了!

希望能帮到你!

答案 3 :(得分:0)

您可以将ImageView包装在CardView中。您可以使用app:cardCornerRadius来设置角半径。就这么简单

<android.support.v7.widget.CardView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:cardCornerRadius="5dp"
        app:cardElevation="0dp">
    <ImageView
        android:id="@+id/imgUserHome"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/photo"/>
 </android.support.v7.widget.CardView>

答案 4 :(得分:0)

请在gradle中添加以下依赖项,并在xml中使用它,如下所示

编译'de.hdodenhof:circleimageview:1.3.0'

<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/profile_image"
            android:layout_width="@dimen/pad_120dp"
            android:layout_height="@dimen/pad_120dp"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@drawable/icon_profile" />