自定义Drawable 实现圆形图片 和带圆角的图片
2016-11-16 20:56
399 查看
最近想实现QQ的圆形头像,网上有不少代码都能实现,但代码上的注释有点少,所以我这种新手理解起来有不少的困难,后来看到了慕课的教程,才有点理解。 自定义Drawable核心类就是draw() 这些效果都是在draw()中实现的
public class CircleDrawable extends Drawable { //定义画笔 private Paint paint; //定义图片的直径 private int mWidth; //要画的图片 private Bitmap bitmap; public CircleDrawable(Bitmap bitmap) { // TODO Auto-generated constructor stub this.bitmap = bitmap; //图片 渲染器 及图片照 x和y 平铺 /* *TileMode:(一共有三种) CLAMP :如果渲染器超出原始边界范围,会复制范围内边缘染色。 REPEAT :横向和纵向的重复渲染器图片,平铺。 MIRROR :横向和纵向的重复渲染器图片,这个和REPEAT 重复方式不一样,他是以镜像方式平铺。 */ BitmapShader bitmapShader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP); //定于画笔 paint = new Paint(); paint.setAntiAlias(true);//图片的抗锯齿 paint.setShader(bitmapShader);//为画笔实质图片渲染器 //图片的直径为 图片长宽中较小的那边 mWidth = Math.min(bitmap.getWidth(), bitmap.getHeight()); } @Override public void draw(Canvas arg0) { // TODO Auto-generated method stub //前面是圆心 第三个参数是半径 最后是画笔 arg0.drawCircle(mWidth/2, mWidth/2, mWidth/2, paint); } //支持和窗口一样的透明度 @Override public int getOpacity() { // TODO Auto-generated method stub return PixelFormat.TRANSLUCENT; } //设置画笔的透明度 @Override public void setAlpha(int arg0) { // TODO Auto-generated method stub paint.setAlpha(arg0); } @Override public void setColorFilter(ColorFilter arg0) { // TODO Auto-generated method stub paint.setColorFilter(arg0); } //以下是Drawable 的实际高度和宽度 @Override public int getIntrinsicHeight() { // TODO Auto-generated method stub return mWidth; } @Override public int getIntrinsicWidth() { // TODO Auto-generated method stub return mWidth; } }这样画圆形图片的工具类就OK了再在Activity中onCreate中使用工具类@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);//bitmapShaders = new BitmapShaders(this);setContentView(R.layout.circle_my_view);imageview = (ImageView) findViewById(R.id.myView_imageView);//imageView2 = (ImageView) findViewById(R.id.myView_RoundimageView); }下面的就是实现带圆的图片public class RoundDrawable extends Drawable {private Paint paint;private RectF rectF;private Bitmap bitmap;private BitmapShader bitmapShader;public RoundDrawable(Bitmap bitmap) {// TODO Auto-generated constructor stubthis.bitmap = bitmap;//图片渲染器bitmapShader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);paint = new Paint();paint.setAntiAlias(true);paint.setShader(bitmapShader);}@Overridepublic void draw(Canvas arg0) {// TODO Auto-generated method stubarg0.drawRoundRect(rectF, 30, 30, paint);}@Overridepublic int getOpacity() {// TODO Auto-generated method stubreturn PixelFormat.TRANSLUCENT;}@Overridepublic void setAlpha(int arg0) {// TODO Auto-generated method stubpaint.setAlpha(arg0);}@Overridepublic void setColorFilter(ColorFilter arg0) {// TODO Auto-generated method stubpaint.setColorFilter(arg0);}//Drawable 的实际高度和宽度@Overridepublic int getIntrinsicHeight() {// TODO Auto-generated method stubreturn bitmap.getHeight();}@Overridepublic int getIntrinsicWidth() {// TODO Auto-generated method stubreturn bitmap.getWidth();}@Overridepublic void setBounds(int left, int top, int right, int bottom) {// TODO Auto-generated method stub//super.setBounds(left, top, right, bottom);rectF = new RectF(left, top, right, bottom);}}和圆形图片的代码相类似 多了一个RectF 这是构造一个矩形的类 而setBounds(int left, int top, int right, int bottom)是一个回调方法 在Activity中和上面的圆形图片相同
相关文章推荐
- 自定义Drawable实现圆角图片和圆形图片
- 自定义Drawable 实现图片圆角、圆形、椭圆形
- Android 自定义Drawable 实现圆角圆形图片
- Android 自定义Drawable 实现圆角矩形和圆形图片
- 自定义Drawable实现图片的圆角效果
- Android自定义view实现圆形、圆角和椭圆图片(BitmapShader图形渲染)
- 自定义ImageView实现圆角图片和圆形图片
- Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示
- 自定义view实现图片圆形与圆角
- Android自定义Drawable实现圆形和圆角
- 实现自定义图片View圆形、圆角,椭圆
- 自定义imageVIew实现圆角和圆形图,片圆形图片缩小放大正常,圆角图片放大缩小有点问题
- 自定义View(1)--圆形图片、圆角图片的实现
- [AndroidUI]自定义view(四):实现圆形圆角图片
- Android 自定义 RoundImageView 实现圆角矩形或圆形图片
- Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示
- 自定义Drawable Demo(圆角/圆形图片,Material动画)
- Android 自定义View修炼-Android实现圆形、圆角和椭圆自定义图片View(使用BitmapShader图形渲染方法)
- 自定义Drawable实现圆形和圆角Drawable
- 安卓学习笔记---自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示(矩形圆角加边框)