设计给出了一个圆圈形显示网络图片的方案,无奈,程序猿只好写了一个,现共享出来,代码很简单。

类直接继承自ImageView,修改下他的canvas就行了;

package cn.helloclq.android.widget;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.PaintFlagsDrawFilter;import android.graphics.Path;import android.graphics.Region;import android.util.AttributeSet;import android.widget.ImageView;/** *  * android circle imageView * @author Block Cheng * */public class CircleImageView extends ImageView {Path path;public PaintFlagsDrawFilter mPaintFlagsDrawFilter;// 毛边过滤Paint paint;public CircleImageView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stubinit();}public CircleImageView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubinit();}public CircleImageView(Context context) {super(context);// TODO Auto-generated constructor stubinit();}public void init(){mPaintFlagsDrawFilter = new PaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);paint = new Paint();paint.setAntiAlias(true);paint.setFilterBitmap(true);paint.setColor(Color.WHITE);}@Overrideprotected void onDraw(Canvas cns) {// TODO Auto-generated method stubfloat h = getMeasuredHeight()- 3.0f;float w = getMeasuredWidth()- 3.0f;if (path == null) {path = new Path();        path.addCircle(        w/2.0f                , h/2.0f                , (float) Math.min(w/2.0f, (h / 2.0))                , Path.Direction.CCW);        path.close();}cns.drawCircle(w/2.0f, h/2.0f,  Math.min(w/2.0f, h / 2.0f) + 1.5f, paint); int saveCount = cns.getSaveCount();        cns.save();        cns.setDrawFilter(mPaintFlagsDrawFilter);        cns.clipPath(path,Region.Op.REPLACE);        cns.setDrawFilter(mPaintFlagsDrawFilter);        cns.drawColor(Color.WHITE);super.onDraw(cns);cns.restoreToCount(saveCount);}}
原图片:

放到代码中测试运行

说明:该类对图片的裁剪,导致了轻微的毛边出来,采用网络上的方法处理了,效果不佳,详见代码中的filter。

但如果服务器的图片是纯色背景,这个问题就不是问题了。我也不深入研究了,后面还有很重的任务。

另外,裁剪出圆形图片也是利用相似的原理实现。

如果哪位朋友有好的解决方法,欢迎分享给我,万分谢谢。

更多相关文章

  1. android资源别名
  2. android 带图片的文本框
  3. Android实现图片左右滑动效果
  4. Android(安卓)中加载延时加载动画
  5. Android-Fresco系列3 Producer
  6. Android使用Retrofit技术仿微信图片上传,可以选择多张图片拍照上
  7. Android中获取网络图片的方法(如果手机缓存里面有就从缓存获取)
  8. Android(安卓)APP常用图标尺寸规范
  9. Android: 缩放图片文件引起的OOM异常

随机推荐

  1. Android源代码下载
  2. Android中一个APP启动另一个APP并传递参
  3. Android(安卓)为Notification加上一个进
  4. Android(安卓)获取手机当前所在的经纬度
  5. android之HandlerThread类的实现
  6. API 23 view.ViewGroup——属性分析
  7. Unity3d - Android(安卓)Build : Android
  8. AndroidManifest.xml配置文件选项详解
  9. Android(安卓)报错 FLAG_ACTIVITY_NEW_TA
  10. Android(安卓)记录gitignore文件内容