(转)圆形头像制作

首先创建一个继承ImageView的抽象类MaskedImage。让他重写onDraw方法。代码如下

[java] view plaincopyprint?

  1. public abstract class MaskedImage extends ImageView {
  2. private static final Xfermode MASK_XFERMODE;
  3. private Bitmap mask;
  4. private Paint paint;
  5. static {
  6. PorterDuff.Mode localMode = PorterDuff.Mode.DST_IN;
  7. MASK_XFERMODE = new PorterDuffXfermode(localMode);
  8. }
  9. public MaskedImage(Context paramContext) {
  10. super(paramContext);
  11. }
  12. public MaskedImage(Context paramContext, AttributeSet paramAttributeSet) {
  13. super(paramContext, paramAttributeSet);
  14. }
  15. public MaskedImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {
  16. super(paramContext, paramAttributeSet, paramInt);
  17. }
  18. public abstract Bitmap createMask();
  19. protected void onDraw(Canvas paramCanvas) {
  20. Drawable localDrawable = getDrawable();
  21. if (localDrawable == null)
  22. return;
  23. try {
  24. if (this.paint == null) {
  25. Paint localPaint1 = new Paint();
  26. this.paint = localPaint1;
  27. this.paint.setFilterBitmap(false);
  28. Paint localPaint2 = this.paint;
  29. Xfermode localXfermode1 = MASK_XFERMODE;
  30. @SuppressWarnings("unused")
  31. Xfermode localXfermode2 = localPaint2.setXfermode(localXfermode1);
  32. }
  33. float f1 = getWidth();
  34. float f2 = getHeight();
  35. int i = paramCanvas.saveLayer(0.0F, 0.0F, f1, f2, null, 31);
  36. int j = getWidth();
  37. int k = getHeight();
  38. localDrawable.setBounds(0, 0, j, k);
  39. localDrawable.draw(paramCanvas);
  40. if ((this.mask == null) || (this.mask.isRecycled())) {
  41. Bitmap localBitmap1 = createMask();
  42. this.mask = localBitmap1;
  43. }
  44. Bitmap localBitmap2 = this.mask;
  45. Paint localPaint3 = this.paint;
  46. paramCanvas.drawBitmap(localBitmap2, 0.0F, 0.0F, localPaint3);
  47. paramCanvas.restoreToCount(i);
  48. return;
  49. } catch (Exception localException) {
  50. StringBuilder localStringBuilder = new StringBuilder()
  51. .append("Attempting to draw with recycled bitmap. View ID = ");
  52. System.out.println("localStringBuilder=="+localStringBuilder);
  53. }
  54. }
  55. }
public abstract class MaskedImage extends ImageView {
	private static final Xfermode MASK_XFERMODE;
	private Bitmap mask;
	private Paint paint;

	static {
		PorterDuff.Mode localMode = PorterDuff.Mode.DST_IN;
		MASK_XFERMODE = new PorterDuffXfermode(localMode);
	}

	public MaskedImage(Context paramContext) {
		super(paramContext);
	}

	public MaskedImage(Context paramContext, AttributeSet paramAttributeSet) {
		super(paramContext, paramAttributeSet);
	}

	public MaskedImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {
		super(paramContext, paramAttributeSet, paramInt);
	}

	public abstract Bitmap createMask();

	protected void onDraw(Canvas paramCanvas) {
		Drawable localDrawable = getDrawable();
		if (localDrawable == null)
			return;
		try {
			if (this.paint == null) {
				Paint localPaint1 = new Paint();
				this.paint = localPaint1;
				this.paint.setFilterBitmap(false);
				Paint localPaint2 = this.paint;
				Xfermode localXfermode1 = MASK_XFERMODE;
				@SuppressWarnings("unused")
				Xfermode localXfermode2 = localPaint2.setXfermode(localXfermode1);
			}
			float f1 = getWidth();
			float f2 = getHeight();
			int i = paramCanvas.saveLayer(0.0F, 0.0F, f1, f2, null, 31);
			int j = getWidth();
			int k = getHeight();
			localDrawable.setBounds(0, 0, j, k);
			localDrawable.draw(paramCanvas);
			if ((this.mask == null) || (this.mask.isRecycled())) {
				Bitmap localBitmap1 = createMask();
				this.mask = localBitmap1;
			}
			Bitmap localBitmap2 = this.mask;
			Paint localPaint3 = this.paint;
			paramCanvas.drawBitmap(localBitmap2, 0.0F, 0.0F, localPaint3);
			paramCanvas.restoreToCount(i);
			return;
		} catch (Exception localException) {
			StringBuilder localStringBuilder = new StringBuilder()
					.append("Attempting to draw with recycled bitmap. View ID = ");
			System.out.println("localStringBuilder=="+localStringBuilder);
		}
	}
}

然后新建一个类CircularImage继承MaskedImage。代码如下:

[java] view plaincopyprint?

  1. <SPAN style="FONT-SIZE: 14px">public class CircularImage extends MaskedImage {
  2. public CircularImage(Context paramContext) {
  3. super(paramContext);
  4. }
  5. public CircularImage(Context paramContext, AttributeSet paramAttributeSet) {
  6. super(paramContext, paramAttributeSet);
  7. }
  8. public CircularImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {
  9. super(paramContext, paramAttributeSet, paramInt);
  10. }
  11. public Bitmap createMask() {
  12. int i = getWidth();
  13. int j = getHeight();
  14. Bitmap.Config localConfig = Bitmap.Config.ARGB_8888;
  15. Bitmap localBitmap = Bitmap.createBitmap(i, j, localConfig);
  16. Canvas localCanvas = new Canvas(localBitmap);
  17. Paint localPaint = new Paint(1);
  18. localPaint.setColor(-16777216);
  19. float f1 = getWidth();
  20. float f2 = getHeight();
  21. RectF localRectF = new RectF(0.0F, 0.0F, f1, f2);
  22. localCanvas.drawOval(localRectF, localPaint);
  23. return localBitmap;
  24. }
  25. }</SPAN>
public class CircularImage extends MaskedImage {
	public CircularImage(Context paramContext) {
		super(paramContext);
	}

	public CircularImage(Context paramContext, AttributeSet paramAttributeSet) {
		super(paramContext, paramAttributeSet);
	}

	public CircularImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {
		super(paramContext, paramAttributeSet, paramInt);
	}

	public Bitmap createMask() {
		int i = getWidth();
		int j = getHeight();
		Bitmap.Config localConfig = Bitmap.Config.ARGB_8888;
		Bitmap localBitmap = Bitmap.createBitmap(i, j, localConfig);
		Canvas localCanvas = new Canvas(localBitmap);
		Paint localPaint = new Paint(1);
		localPaint.setColor(-16777216);
		float f1 = getWidth();
		float f2 = getHeight();
		RectF localRectF = new RectF(0.0F, 0.0F, f1, f2);
		localCanvas.drawOval(localRectF, localPaint);
		return localBitmap;
	}
}

新建一个MainActivity,代码如下:

[java] view plaincopyprint?

  1. public class MainActivity extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. CircularImage cover_user_photo = (CircularImage) findViewById(R.id.cover_user_photo);
  7. cover_user_photo.setImageResource(R.drawable.face);
  8. }
  9. }
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		CircularImage cover_user_photo = (CircularImage) findViewById(R.id.cover_user_photo);
		cover_user_photo.setImageResource(R.drawable.face);
	}
}

其XML布局文件为:

[html] view plaincopyprint?

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:gravity="center" >
  6. <ImageView
  7. android:layout_width="82.0dip"
  8. android:layout_height="82.0dip"
  9. android:layout_centerInParent="true"
  10. android:contentDescription="@null"
  11. android:src="@drawable/me_head_bg" />
  12. <com.doublefi123.diary.widget.CircularImage
  13. android:id="@+id/cover_user_photo"
  14. android:layout_width="74.0dip"
  15. android:layout_height="74.0dip"
  16. android:layout_centerInParent="true" />
  17. </RelativeLayout>
时间: 2024-08-30 05:20:13

(转)圆形头像制作的相关文章

圆形头像制作

//1.设置圆角    self.imageView.layer.masksToBounds = YES;//2.设置圆形图案半径    self.imageView.layer.cornerRadius = self.imageView.layer.bounds.size.width *0.5;//3.设置边框颜色    self.imageView.layer.borderColor = [UIColor redColor].CGColor;//4.设置边框宽度    self.imageV

WordPress制作圆形头像友情链接页面的方法

网上看见过很多种友情链接页面,我比较喜欢的是圆形头像的这种,先看看效果吧:传送门 就是这种上面是圆形的友链用户头像,下面是友链用户网站名,然后鼠标移上去头像会旋转,怎么实现这种效果呢?我在网上找了很多都不是很详细,于是打算自己写一篇文章方便大家: 操作之前先看看我的另外两篇文章:[这两篇文章很重要,网上很多的方法不详细就是少了很多的步骤] 1.WordPress设置圆形旋转头像的方法 这个里面的功能有很多,但是在这里我叫你们查看这篇文章主要是为了利用里面设置友链用户头像大小,不操作这一步的话设置

【Android】自定义圆形ImageView(圆形头像 可指定大小)

最近在仿手Q的UI,这里面经常要用到的就是圆形头像,看到 在android中画圆形图片的几种办法 这篇文章,了解了制作这种头像的原理.不过里面提供的方法还有一个不足的地方就是不能根据实际需求改变图片的大小,也就是说提供的原图是大尺寸的,转换之后的图片也是大尺寸的,这显然不符合我们实际项目中的需求.于是我对里面介绍的第一种方法做了一番改进,使其能直接在XML中指定图片的大小. 大体步骤 将原图居中裁剪成正方形 根据指定的宽度对正方形进行缩放 裁剪成圆形 效果 代码实现 package com.de

【Android】自己定义圆形ImageView(圆形头像 可指定大小)

近期在仿手Q的UI,这里面常常要用到的就是圆形头像,看到 在android中画圆形图片的几种办法 这篇文章,了解了制作这样的头像的原理.只是里面提供的方法另一个不足的地方就是不能依据实际需求改变图片的大小,也就是说提供的原图是大尺寸的,转换之后的图片也是大尺寸的,这显然不符合我们实际项目中的需求.于是我对里面介绍的第一种方法做了一番改进,使其能直接在XML中指定图片的大小. 大体步骤 将原图居中裁剪成正方形 依据指定的宽度对正方形进行缩放 裁剪成圆形 效果 代码实现 package com.de

兼容所有浏览器圆形头像的CSS

圆形头像的制作原理就是在头像上覆盖一张透明的图片,把四个角颜色设置成页面的背景颜色,中间透明. 这里需要注意的是需要把图片保存成24位的png,虽然IE6支持8位的png的透明,但是8位的png做透明圆弧图片存在效果上的问题,就是存在白色的杂边或锯齿.24位的png或32位的png的圆弧透明(半透明)图片则非常光滑,但是该死的IE6不支持24位的png或32位的png透明(其他浏览器都支持),需要我们额外的一下处理:使用 AlphaImageLoader就可以解决IE6不能显示24位和32位PN

圆形头像CircleImageView和Cardview使用

效果: 圆形头像在我们的日常使用的app中很常见,因为圆形的头像比较美观. 使用圆形图片的方法可能有我们直接将图片裁剪成圆形再在app中使用, 还有就是使用自定义View对我们设置的任何图片自动裁剪成圆形. 这里使用github上CircleImageView github:https://github.com/hdodenhof/CircleImageView CardView顾名思义卡片式的View, CardView继承的是FrameLayout,所以摆放内部控件的时候需要注意一下 可以设

圆形头像以及一些常见需求形状自定义ImageView组件

在实际开发中,我们经常会遇到这样的需求,就是无论图片长啥样,我们都要其显示成圆形.圆形加一个边框.矩形加边框,带圆角的矩形等等,lib和demo下载地址:https://github.com/mapleyuan/RoundImageView.效果如下,大家有兴趣的可以下下来使用,发现有什么问题也欢迎向我提出. 下面我大概讲下实现. 首先当然是继承ImageView,重写onDraw()方法.我们来看看onDraw的实现:     protected void onDraw(Canvas canv

几行实现圆形头像,以及一些常见需求形状自定义ImageView组件

在实际开发中,我们经常会遇到这样的需求,就是无论图片长啥样,我们都要其显示成圆形.圆形加一个边框.矩形加边框,带圆角的矩形等等,我已把自己平常用的组件和demo上传到了github(https://github.com/mapleyuan/RoundImageView)上,效果如下.大家有兴趣的可以下下来使用,发现有什么问题也欢迎向我提出. 下面我大概讲下实现. 首先当然是继承ImageView,重写onDraw()方法.我们来看看onDraw的实现: @Override     protect

圆形头像处理

#import "MainViewController.h" @interface MainViewController () @end @implementation MainViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //创建圆形头像视图 UIImageView*avatar=[[[UIImageView al