圆形头像白边加阴影

作者: 只喝纯牛奶的哈趴狗 | 来源:发表于2016-09-14 14:08 被阅读0次

先上效果图:

上一段源码

```

public class CircularImageView extends ImageView

{

private int borderWidth = 4;

private int viewWidth;

private int viewHeight;

private Bitmap image;

private Paint paint;

private Paint paintBorder;

private BitmapShader shader;

public CircularImageView(Context context)

{

super(context);

setup();

}

public CircularImageView(Context context, AttributeSet attrs)

{

super(context, attrs);

setup();

}

public CircularImageView(Context context, AttributeSet attrs, int defStyle)

{

super(context, attrs, defStyle);

setup();

}

private void setup()

{

// init paint

paint = new Paint();

paint.setAntiAlias(true);

paintBorder = new Paint();

setBorderColor(Color.WHITE);

paintBorder.setAntiAlias(true);

this.setLayerType(LAYER_TYPE_SOFTWARE, paintBorder);

paintBorder.setShadowLayer(4.0f, 0.0f, 2.0f, Color.BLACK);

}

public void setBorderWidth(int borderWidth)

{

this.borderWidth = borderWidth;

this.invalidate();

}

public void setBorderColor(int borderColor)

{

if (paintBorder != null)

paintBorder.setColor(borderColor);

this.invalidate();

}

private void loadBitmap()

{

BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable();

if (bitmapDrawable != null)

image = bitmapDrawable.getBitmap();

}

@SuppressLint("DrawAllocation")

@Override

public void onDraw(Canvas canvas)

{

// load the bitmap

loadBitmap();

// init shader

if (image != null)

{

shader = new BitmapShader(Bitmap.createScaledBitmap(image, canvas.getWidth(), canvas.getHeight(), false), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

paint.setShader(shader);

int circleCenter = viewWidth / 2;

// circleCenter is the x or y of the view's center

// radius is the radius in pixels of the cirle to be drawn

// paint contains the shader that will texture the shape

canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter + borderWidth - 4.0f, paintBorder);

canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter - 4.0f, paint);

}

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

{

int width = measureWidth(widthMeasureSpec);

int height = measureHeight(heightMeasureSpec, widthMeasureSpec);

viewWidth = width - (borderWidth * 2);

viewHeight = height - (borderWidth * 2);

setMeasuredDimension(width, height);

}

private int measureWidth(int measureSpec)

{

int result = 0;

int specMode = MeasureSpec.getMode(measureSpec);

int specSize = MeasureSpec.getSize(measureSpec);

if (specMode == MeasureSpec.EXACTLY)

{

// We were told how big to be

result = specSize;

}

else

{

// Measure the text

result = viewWidth;

}

return result;

}

private int measureHeight(int measureSpecHeight, int measureSpecWidth)

{

int result = 0;

int specMode = MeasureSpec.getMode(measureSpecHeight);

int specSize = MeasureSpec.getSize(measureSpecHeight);

if (specMode == MeasureSpec.EXACTLY)

{

// We were told how big to be

result = specSize;

}

else

{

// Measure the text (beware: ascent is a negative number)

result = viewHeight;

}

return (result + 2);

}

}

/**

* 把bitmap转成圆形

*/

publicBitmaptoRoundBitmap(Bitmap bitmap) {

intwidth = bitmap.getWidth();

intheight = bitmap.getHeight();

intr =0;

//取最短边做边长

if(width < height) {

r = width;

}else{

r = height;

}

//构建一个bitmap

Bitmap backgroundBm = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);

//new一个Canvas,在backgroundBmp上画图

Canvas canvas =newCanvas(backgroundBm);

Paint p =newPaint();

//设置边缘光滑,去掉锯齿

p.setAntiAlias(true);

RectF rect =newRectF(0,0,r,r);

//通过制定的rect画一个圆角矩形,当圆角X轴方向的半径等于Y轴方向的半径时,

//且都等于r/2时,画出来的圆角矩形就是圆

canvas.drawRoundRect(rect,r /2,r /2,p);

//设置当两个图形相交时的模式,SRC_IN为取SRC图形相交的部分,多余的将被去掉

p.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.SRC_IN));

//canvas将bitmap画在backgroundBmp上

canvas.drawBitmap(bitmap, null,rect,p);

returnbackgroundBm;

}

```

首次写文章下次修改。

相关文章

  • 圆形头像白边加阴影

    先上效果图: 上一段源码 ``` public class CircularImageView extends I...

  • iOS-圆形头像+阴影

    我们经常会做圆形头像+阴影的效果1.直接添加到View图片效果如下: 写这篇文章的目的单纯为了记录代码,方便后期自...

  • 自定义view-仿抖音直播头像

    直接贴代码 原理为画边框,波纹圆形和圆形头像 然后波纹圆形和圆形头像一起播放动画.

  • 圆形头像

    HTML: // canvas画海报var loading;funct...

  • CircleAvatar

    CircleAvatar 圆形头像

  • iOS 如何切圆形的阴影效果

    // 如何切圆形的阴影效果 // 先创建一个父视图,给父视图加阴影,在再给原先的视图切圆角. //1.透明的...

  • 圆形头像OR方形头像

    圆形头像OR方形头像 知乎上有人问圆形头像or方形头像选择背后的设计理论,我也掺和了一脚: 问题地址:http:/...

  • iOS 图片添加阴影效果

    Code 圆形图片设置阴影(补充) < 设置图片圆角阴影

  • android笔记-003 开源库

    圆形头像 使用开源库 https://github.com/hdodenhof/CircleImageView圆形...

  • Tailwind Image

    常用图片的效果依靠是圆角和阴影属性,可以产生很多不同的效果,比如圆形图片更多是用于社交人物头像展示。 类型描述圆角...

网友评论

    本文标题:圆形头像白边加阴影

    本文链接:https://www.haomeiwen.com/subject/enhwjttx.html