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

标签 android android-layout uiimageview android-camera

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

Imageview 是这样的

one

最佳答案

使用下面的自定义 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。

关于android - 如何在android中的自定义圆角 ImageView 中设置图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36004745/

相关文章:

iphone - 设置 UIImageView 大小?

安卓同屏分辨率

java - 在 Android 上保存和恢复日历应用程序的数据

android - Android 上独立于系统时钟的循环计时器

Android -- 设备解锁时会发生什么?

旋转时Android应用程序崩溃

android - android native 和 react native 之间的通信

android - 按钮不显示 Material Design

iOS - 无法检测到应用程序崩溃

ios - 翻译来自 iPhone 4 - iPhone 5 的多张图像