最近有一个实现一个带有圆角的ImageView的需求,在网上找了找三方,虽然Demo都是正确的,但是移植过来就不可以了,因为请求链接的时候用的是xUtils中Bitmap来进行解析的,这样就总是会报类型转换异常的错误。
就这样只能自己定义一个了.
Demo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
package com.yizooo.yizooo.ui; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.RectF; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; import com.lidroid.xutils.bitmap.core.AsyncDrawable; /** * Created by 雪宝宝 on 2016/3/27. * 自定义圆角工具 */ public class RoundImageView extends ImageView { private Paint paint; public RoundImageView(Context context) { this (context, null ); } public RoundImageView(Context context, AttributeSet attrs) { this (context, attrs, 0 ); } public RoundImageView(Context context, AttributeSet attrs, int defStyle) { super (context, attrs, defStyle); paint = new Paint(); } /** * 绘制圆角矩形图片 */ @Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); Bitmap bitmap = null ; if ( null != drawable && drawable instanceof BitmapDrawable ) { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; bitmap = bitmapDrawable.getBitmap(); //Bitmap bitmap =( (BitmapDrawable)drawable).getBitmap(); Bitmap b = getRoundBitmap(bitmap, 10 ); final Rect rectSrc = new Rect( 0 , 0 , b.getWidth(), b.getHeight()); final Rect rectDest = new Rect( 0 , 0 ,getWidth(),getHeight()); paint.reset(); canvas.drawBitmap(b, rectSrc, rectDest, paint); } //防止出现类型转换异常 else if ( this .getDrawable() instanceof AsyncDrawable){ bitmap = Bitmap .createBitmap( getWidth(), getHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas1 = new Canvas(bitmap); // canvas.setBitmap(bitmap); drawable.setBounds( 0 , 0 , getWidth(), getHeight()); drawable.draw(canvas1); } else { super .onDraw(canvas); } } /** * 获取圆角矩形图片方法 * @param bitmap * @param roundPx,一般设置成14 * @return Bitmap * @author caizhiming */ private Bitmap getRoundBitmap(Bitmap bitmap, int roundPx) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242 ; final Rect rect = new Rect( 0 , 0 , bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias( true ); canvas.drawARGB( 0 , 0 , 0 , 0 ); paint.setColor(color); int x = bitmap.getWidth(); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode( new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<? xml version = "1.0" encoding = "utf-8" ?> < RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:id = "@+id/swipelayout" android:layout_width = "fill_parent" android:layout_height = "wrap_content" > < com.yizooo.yizooo.ui.RoundImageView android:id = "@+id/item_frag_news_icon" android:layout_width = "@dimen/dp_47" android:layout_height = "@dimen/dp_50" android:scaleType = "fitXY" android:src = "@mipmap/fuwutongzhi" android:layout_margin = "@dimen/dp_10" /> </ RelativeLayout > |
最终的效果图就不发照片了,各位朋友尝试一下就可以看出效果图了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/u010196821/article/details/51003330