Android学习笔记--自定义圆形头像简单实现
来源:互联网 发布:欧拉回路算法 编辑:程序博客网 时间:2024/06/02 04:12
实现圆形头像功能的方法有很多,可以使用别人的开源,也可以自定义一个,而且挺简单的。
1.
Glide实现圆形图像 Glide.with(mContext) .load(R.drawable.iv_image_header) .error(R.drawable.ic_error_default) .transform(new GlideCircleTransform(mContext)) .into(mImage);
2.自定义viewpublic class CircleImage extends AppCompatImageView { Paint p1; int width, height; public CircleImage(Context context) { super(context); } public CircleImage(Context context, @Nullable AttributeSet attrs) { super(context, attrs);// int src_resource = attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/android", "src", 0);// bitmap= BitmapFactory.decodeStream(getResources().openRawResource(src_resource)); } public CircleImage(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = MeasureSpec.getSize(widthMeasureSpec); height = MeasureSpec.getSize(heightMeasureSpec); int size = Math.min(width, height); setMeasuredDimension(size, size); } @Override protected void onDraw(Canvas canvas) { int radis = Math.min(width, height) / 2; if (getDrawable() == null){ //如果没有在xml设置图片资源时 Paint paint=new Paint(); paint.setStyle(Paint.Style.FILL_AND_STROKE); canvas.drawCircle(radis, radis, radis, paint); } else { Bitmap bp = getBitmapFromDrawble(getDrawable()); p1 = new Paint(); Matrix matrix = new Matrix(); float scale = radis * 2.0f / Math.min(bp.getWidth(), bp.getHeight()); matrix.setScale(scale, scale);//BitmapShader的作用就是通过Paint对画布进行置顶Bitmap的填充,填充时有以下几种模式可以选择:// 1.CLAMP 拉伸 拉伸的是图片最后的哪一个像素,不断重复// 2.REPEAT 重复 横向、纵向不断重复// 3.MIRROR 镜像 横向不断翻转重复,纵向不断翻转重复 BitmapShader bitmapShader = new BitmapShader(bp, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); bitmapShader.setLocalMatrix(matrix); p1.setShader(bitmapShader); canvas.drawCircle(radis, radis, radis, p1); } } /*** * 获取bitmap * @param drawable * @return */ public Bitmap getBitmapFromDrawble(Drawable drawable) { Bitmap bitmap = null; if (drawable instanceof BitmapDrawable) { BitmapDrawable bd = (BitmapDrawable) drawable; return bd.getBitmap(); } int w = drawable.getIntrinsicWidth(); int h = drawable.getIntrinsicHeight(); bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); return bitmap; }}
其中BitmapShader, Shader家族的 专门处理图片渲染的.可以通过Paint.setShader(shader)
方法为画笔Paint设置shader,这样就可以绘制出多彩的图形,那么Shader是什么呢?做过GPU绘图的同学应该都知道这个词汇,Shader就是着色器的意思。我们可以这样理解,Canvas中的各种drawXXX方法定义了图形的形状,画笔中的Shader则定义了图形的着色、外观,二者结合到一起就决定了最终Canvas绘制的被色彩填充的图形的样子。具体请前往
http://blog.csdn.net/iispring/article/details/50500106
详细代码给出,有需要的自行参考,不足之处,请指出。
还有其他大牛实现的博客,个人感到十分不错,推荐给各位:
http://blog.csdn.net/zhoubin1992/article/details/47258639
阅读全文
0 0
- Android学习笔记--自定义圆形头像简单实现
- Android简单制作自定义圆形头像
- Android实现圆形头像-使用自定义控件
- Android 简易 自定义ImageView 实现圆形头像
- Android自定义圆形头像
- android自定义圆形头像
- Android 自定义圆形头像
- Android自定义圆形头像
- Android 自定义圆形头像
- Android 自定义圆形头像
- Android 笔记 - 圆形头像
- Android实现圆形头像
- Android圆形头像实现
- android 实现圆形头像
- 自定义控件实现圆形头像
- 自定义ImageView实现圆形头像
- 自定义ImageView实现圆形头像
- Android中的自定义圆形头像
- maven jetty插件报 No Transaction manager found
- 群发邮件
- 关于用Oracle的dblink连接到sqlservervd 的问题
- 翻转字符串算法
- 《Android开发艺术探索》学习笔记---Aty屏幕旋转生命周期
- Android学习笔记--自定义圆形头像简单实现
- xmanager连接redhalt6.8
- 去掉一组整型数组中重复的值
- Java动态获取某个接口下所有的实现类对象集合
- 决策树的几点注记
- chromedriver,phantomjs 资源下载
- 类中的三种函数(普通成员函数、静态成员函数、COSNT成员函数)总结
- libxml2解析xml总结
- 爱剪辑(国产专业级视频剪辑工具) V2.9官方版下载 | 含爱剪辑好莱坞特效包