Android 圆形ImageView 怎样解决边缘锯齿的问题

wzy820715 2012-08-21 12:08:09
项目里面的用户头像要求是圆形的,所以自己重写了个ImageView控件,但是实际显示效果不是很好,图片边缘锯齿比较明显,网上看了一些抗锯齿的方法,都没有效果,哪位高手有比较好的解决方法,或者其它的圆形ImageView实现方式,分享下吧~~~谢啦

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Path;
import android.util.AttributeSet;
import android.widget.ImageView;

public class RoundImageView extends ImageView {

public RoundImageView(Context context) {
super(context);
}

public RoundImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}

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

@Override
protected void onDraw(Canvas canvas) {
Path clipPath = new Path();
int w = this.getWidth();
int h = this.getHeight();
clipPath.addCircle(w/2, h/2, w/2, Path.Direction.CW);
canvas.clipPath(clipPath);
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
super.onDraw(canvas);
}
}
...全文
4032 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wssxs8888 2013-05-30
  • 打赏
  • 举报
回复
引用 楼主 wzy820715 的回复:
项目里面的用户头像要求是圆形的,所以自己重写了个ImageView控件,但是实际显示效果不是很好,图片边缘锯齿比较明显,网上看了一些抗锯齿的方法,都没有效果,哪位高手有比较好的解决方法,或者其它的圆形ImageView实现方式,分享下吧~~~谢啦
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Path;
import android.util.AttributeSet;
import android.widget.ImageView;

public class RoundImageView extends ImageView {

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

	@Override
	protected void onDraw(Canvas canvas) {		
		Path clipPath = new Path();
		int w = this.getWidth();
		int h = this.getHeight();
		clipPath.addCircle(w/2, h/2, w/2, Path.Direction.CW);   		
		canvas.clipPath(clipPath);	
		canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
		super.onDraw(canvas);
	}
}
楼主你好,我用你的代码,应用到布局文件中,从布局文件中看是圆形的,可是一运行后就变成原图了。 求解!
搬不搬砖 2012-10-25
  • 打赏
  • 举报
回复
试试用photoshop做一张圆形的png图,然后通过图片叠加来实现
Marco_Lee 2012-10-25
  • 打赏
  • 举报
回复
我发现这样也做不到圆润,只能是减轻锯齿。如果要绝对圆润,估计得要用openGL吧~~
sada09 2012-10-25
  • 打赏
  • 举报
回复
1)mPaint.setAntiAlias();
2)mPaint.setFilterBitmap(true)。
文章链接
http://blog.csdn.net/sada09/article/details/8017248
ihrthk 2012-10-25
  • 打赏
  • 举报
回复
paint,有一个反锯齿属性,什么anti记不得了
KevinLau0926 2012-10-24
  • 打赏
  • 举报
回复
请问下,为什么我的图片显示不是圆的呢?
wzy820715 2012-08-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

设置paint的属性
[/Quote]
paint的哪个属性?能具体点吗,谢啦
wzy820715 2012-08-22
  • 打赏
  • 举报
回复
自己顶下吧~~
CNnumen 2012-08-21
  • 打赏
  • 举报
回复
设置paint的属性

80,492

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧