如何使用形状圆创建一个带有边框的imageView?

时间:2015-05-19 09:04:56

标签: android android-imageview

我需要创建一个Android应用,其中imageview需要是一个圆圈(通过裁剪squre图像)。我使用了StackOverFlow的一些编码,但我不知道为它添加边框。

编码如下:

package com.fidenz.fexceller.fexceller;

/**
 * Created by Chathu Hettiarachchi on 5/18/2015.
 */
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;

public class RoundedImg extends Drawable {
    private final Bitmap mBitmap;
    private final Paint mPaint;
    private final RectF mRectF;
    private final int mBitmapWidth;
    private final int mBitmapHeight;

    public RoundedImg(Bitmap bitmap) {
        mBitmap = bitmap;
        mRectF = new RectF();
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        final BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        mPaint.setShader(shader);

        mBitmapWidth = mBitmap.getWidth();
        mBitmapHeight = mBitmap.getHeight();
    }

    @Override
    public void draw(Canvas canvas) {
        canvas.drawOval(mRectF, mPaint);
    }

    @Override
    protected void onBoundsChange(Rect bounds) {
        super.onBoundsChange(bounds);
        mRectF.set(bounds);
    }

    @Override
    public void setAlpha(int alpha) {
        if (mPaint.getAlpha() != alpha) {
            mPaint.setAlpha(alpha);
            invalidateSelf();
        }
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
        mPaint.setColorFilter(cf);
    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }

    @Override
    public int getIntrinsicWidth() {
        return mBitmapWidth;
    }

    @Override
    public int getIntrinsicHeight() {
        return mBitmapHeight;
    }

    public void setAntiAlias(boolean aa) {
        mPaint.setAntiAlias(aa);
        invalidateSelf();
    }

    @Override
    public void setFilterBitmap(boolean filter) {
        mPaint.setFilterBitmap(filter);
        invalidateSelf();
    }

    @Override
    public void setDither(boolean dither) {
        mPaint.setDither(dither);
        invalidateSelf();
    }

    public Bitmap getBitmap() {
        return mBitmap;
    }

}

我用这个叫图像:

ImageView profilePic;
RoundedImg roundedImage,ring;

profilePic = (ImageView)findViewById(R.id.img_home_profile_pic);

        Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.no_image);
        roundedImage = new RoundedImg(bm);
        profilePic.setImageDrawable(roundedImage);

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

ImageView profilePic;
RoundedImg roundedImage,ring;

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.no_image);
Bitmap withBorder = addBlackBorder(bm, 5);
roundedImage = new RoundedImg(withBorder);
profilePic.setImageDrawable(roundedImage);

 private Bitmap addBlackBorder(Bitmap bmp, int borderSize) {
    Bitmap bmpWithBorder = Bitmap.createBitmap(bmp.getWidth() + borderSize * 2, bmp.getHeight() + borderSize * 2, bmp.getConfig());
    Canvas canvas = new Canvas(bmpWithBorder);
    canvas.drawColor(Color.BLACK);
    canvas.drawBitmap(bmp, borderSize, borderSize, null);
    return bmpWithBorder;
}