在很多应用中,我们看到,个人主页里面的头像一般都是圆的,设计成圆的会使整个界 面布 局变的优雅漂亮。那么,怎么使头像变圆呢?有的人说可以在上面加一个中间为透明圆形的png图,用它来遮盖住头像不就行了嘛,但是png四周始终始终是不 透明的,怎么做也达不到如下的效果图的。

下面我们讲讲怎么做成的吧。

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

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。代码如下:

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,代码如下:

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布局文件为:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center" >

android:layout_width="82.0dip"

android:layout_height="82.0dip"

android:layout_centerInParent="true"

android:contentDescription="@null"

android:src="@drawable/me_head_bg" />

android:id="@+id/cover_user_photo"

android:layout_width="74.0dip"

android:layout_height="74.0dip"

android:layout_centerInParent="true" />

android 头像球_【Android 界面效果44】Android之圆头像实例相关推荐

  1. Android 头像透明背景不透明效果

    有很多需求是头像的背景是不透明的,但是圆头像是透明的.如果直接设置背景的不透明度,那么头像的不透明度一会改变. 如图: 第一种是直接设置背景的不透明度,发现这样肯定会影响设计. 第二种的办法是直接在父 ...

  2. android 悬浮窗口和主界面同时显示,Android 悬浮窗口(及解决6.0以上无法显示问题)...

    思路实现 通过WindowManager添加一个View,创建一个系统顶级的窗口,实现悬浮窗口的效果. 本篇思路,来源于郭霖大神的悬浮窗口教程. 大致介绍WindowManager 类 创建的对象: ...

  3. android 屏幕投射_将自定义内容从Android应用投射到电视(2020年方法)

    android 屏幕投射 If you're anything like me, who has never created a screen-cast app before and want to ...

  4. android 设备名称_如何更改您的Android TV的设备名称

    android 设备名称 Android TV is Google's attempt at taking over the living room, and with some units bein ...

  5. android 头像球_Android实现圆形头像效果

    效果截图 image.png 实现原理 对于圆形头像的实现,其实就是对方形图像做某些处理,以达到圆形头像的效果.一般我们会通过Canvas和Paint结合来实现这种效果. 自定义View来实现 因为圆 ...

  6. Android实现通用的ActivityGroup(效果类似Android微博客户端主界面),...

    为什么80%的码农都做不了架构师?>>>    可以说ActivityGroup是Google提供的一个非常优秀的API,但它需要做稍微复杂的重写才能用起来比较方便,本文拟将实现这个 ...

  7. android 头像球_Android一行代码实现圆形头像

    效果图 在开发APP中,经常要实现圆形头像,那么该如何实现呢? 要裁剪吗,要重写draw函数吗?不用,只用一行代码就可以实现 Glide实现圆形图像 Glide.with(mContext) .loa ...

  8. android开花动画,15款界面最漂亮Android应用程序揭晓

    据国外媒体报道,谷歌的Android系统从最初的并不被人看好,到现在获得极大的成功,至今已经走过了5个年头.虽然Android现在已经跃居市场占有率首位,但批评之声仍比比皆是,尤其是与其最大的竞争对手 ...

  9. android 输入法更换_一种动态切换Android系统输入法的弹出模式的方法与流程

    本发明涉及一种Android系统利用动态切换输入法的弹出模式解决输入法跳闪抖动问题的方法,属于安卓系统技术领域. 背景技术: 随着Android系统的快速发展以及安卓手机的不断普及,基于Android ...

最新文章

  1. 配置网口相机(大恒水星相机)
  2. 毕业设计——第三章 开发方法及系统实现(5)
  3. iOS 之 UITextField
  4. HTML中空格代码为,html空格 html 空格代码
  5. SpringCloud创建Config Client通过Eureka访问Config
  6. python十进制转换_Python进制转换
  7. 中兴天机Axon 10 Pro安兔兔跑分曝光:刷新记录!
  8. redis key失效的事件_Redis常见、常用的知识点
  9. 自学Java要不要背熟语法_JAVASE经典面试问题(必须熟背),你Get到了吗?
  10. 网页设计中常用的20个Web安全字体
  11. office插件开发_OneKeyTools:强大PPT插件
  12. 肿么用photoshop将位图转化成矢量图
  13. 袋鼠云研发手记 | 开源·数栈-扩展FlinkSQL实现流与维表的join
  14. warcraft 3 经典语句之月之女祭司(Priestess of the moon)
  15. Lr预设(手机+电脑):复古巧克力色电影灯室棕褐色摄影Lightroom滤镜调色预设
  16. 统计学习三要素个人理解
  17. Ubuntu搭建邮箱服务器
  18. 厉害了!99行代码实现《冰雪奇缘》
  19. OpenDDS有问必答
  20. linux怎么刷机教程,Ubuntu手机版来了 附刷机教程

热门文章

  1. Vue的渐进式怎么理解
  2. C语言 输出出生日期
  3. 自己的网页嵌入外部邮箱登陆
  4. windows快捷键之打开网络连接
  5. laravel view
  6. 2021信息安全工程师学习笔记(四)
  7. php 算生存曲线,生存分析之生存曲线绘制
  8. 教你用直播大师在局域网内发布组播节目
  9. 使命召唤系列已创造近9000万销量
  10. TS OLT Internet业务和组播业务(multicast)配置指导