android 显示 圆形图片

树先生1991 2013-12-20 11:05:23
RT,怎样做一个圆形的控件来显示一个图片,使得图片出现圆形的效果。
类似效果如 新版手机qq空间 里个人的头像

我之前给button设置了一个background----自定义shape,实现了圆形按钮。
然后我用同样的方法放到imageview上就没效果,原因可能是imageView的src覆盖了background

我自己写了一个ImageView ,并在OnDraw中给canvas 设置了一个 path,虽然实现了这种圆形效果,但是有锯齿。而抗锯齿只有使用paint才能实现,所以想问下大家,如何完美实现这种效果??
我的代码:

@Override
protected void onDraw(Canvas canvas)
{
Path clipPath = new Path();
clipPath.addCircle(getWidth()/2,getHeight()/2,Math.min(getWidth()/2,getHeight()/2),
Path.Direction.CW);

canvas.clipPath(clipPath);

super.onDraw(canvas);
}



不需要提供代码,只需要一个思路,几个关键字,我自己研究就行,谢谢各位!
...全文
172 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
依然绿茶 2013-12-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/whu_zhangmin/article/details/12652045 我之前实现过,正好写了记录,楼主可以去看看。 传入原Bitmap,函数返回的就是变圆后的Bitmap
private Bitmap circleBitmap(Bitmap bitmap) {
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        final int color = 0xff000000;
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        mPaint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        mPaint.setColor(color);
        final int width = bitmap.getWidth();
        canvas.drawCircle(width / 2, width / 2, width / 2, mPaint);
        mPaint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, mPaint);//将图片绘制成白色图片
        return output;
}
树先生1991 2013-12-20
  • 打赏
  • 举报
回复
引用 1 楼 ncepu307 的回复:
http://blog.csdn.net/whu_zhangmin/article/details/12652045 我之前实现过,正好写了记录,楼主可以去看看。 传入原Bitmap,函数返回的就是变圆后的Bitmap
private Bitmap circleBitmap(Bitmap bitmap) {
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        final int color = 0xff000000;
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        mPaint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        mPaint.setColor(color);
        final int width = bitmap.getWidth();
        canvas.drawCircle(width / 2, width / 2, width / 2, mPaint);
        mPaint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, mPaint);//将图片绘制成白色图片
        return output;
}
万分感谢,你给了我启发。 我又查看了下 ApiDemo中Graphics/Xfermodes 工程,确实有很多效果,也推荐给你看看。

80,337

社区成员

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

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