废话不多说了,直接给大家贴代码了。
java类如下:
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
107
108
109
110
111
112
113
114
115
116
117
118
119
|
import android.content.context; import android.content.res.typedarray; import android.graphics.bitmap; import android.graphics.bitmap.config; import android.graphics.canvas; import android.graphics.color; import android.graphics.paint; import android.graphics.path; import android.graphics.porterduff; import android.graphics.porterduffxfermode; import android.graphics.rectf; import android.util.attributeset; import android.widget.imageview; import cn.dotcreate.tt.r; public class roundangleimageview extends imageview { private paint paint; private int roundwidth = 5 ; private int roundheight = 5 ; private paint paint2; public roundangleimageview(context context, attributeset attrs, int defstyle) { super (context, attrs, defstyle); init(context, attrs); } public roundangleimageview(context context, attributeset attrs) { super (context, attrs); init(context, attrs); } public roundangleimageview(context context) { super (context); init(context, null ); } private void init(context context, attributeset attrs) { if (attrs != null ) { typedarray a = context.obtainstyledattributes(attrs, r.styleable.roundangleimageview); roundwidth= a.getdimensionpixelsize(r.styleable.roundangleimageview_roundwidth, roundwidth); roundheight= a.getdimensionpixelsize(r.styleable.roundangleimageview_roundheight, roundheight); } else { float density = context.getresources().getdisplaymetrics().density; roundwidth = ( int ) (roundwidth*density); roundheight = ( int ) (roundheight*density); } paint = new paint(); paint.setcolor(color.white); paint.setantialias( true ); paint.setxfermode( new porterduffxfermode(porterduff.mode.dst_out)); paint2 = new paint(); paint2.setxfermode( null ); } @override public void draw(canvas canvas) { bitmap bitmap = bitmap.createbitmap(getwidth(), getheight(), config.argb_8888); canvas canvas2 = new canvas(bitmap); super .draw(canvas2); drawliftup(canvas2); drawrightup(canvas2); drawliftdown(canvas2); drawrightdown(canvas2); canvas.drawbitmap(bitmap, 0 , 0 , paint2); bitmap.recycle(); } private void drawliftup(canvas canvas) { path path = new path(); path.moveto( 0 , roundheight); path.lineto( 0 , 0 ); path.lineto(roundwidth, 0 ); path.arcto( new rectf( 0 , 0 , roundwidth* 2 , roundheight* 2 ), - 90 , - 90 ); path.close(); canvas.drawpath(path, paint); } private void drawliftdown(canvas canvas) { path path = new path(); path.moveto( 0 , getheight()-roundheight); path.lineto( 0 , getheight()); path.lineto(roundwidth, getheight()); path.arcto( new rectf( 0 , getheight()-roundheight* 2 , 0 +roundwidth* 2 , getheight()), 90 , 90 ); path.close(); canvas.drawpath(path, paint); } private void drawrightdown(canvas canvas) { path path = new path(); path.moveto(getwidth()-roundwidth, getheight()); path.lineto(getwidth(), getheight()); path.lineto(getwidth(), getheight()-roundheight); path.arcto( new rectf( getwidth()-roundwidth* 2 , getheight()-roundheight* 2 , getwidth(), getheight()), 0 , 90 ); path.close(); canvas.drawpath(path, paint); } private void drawrightup(canvas canvas) { path path = new path(); path.moveto(getwidth(), roundheight); path.lineto(getwidth(), 0 ); path.lineto(getwidth()-roundwidth, 0 ); path.arcto( new rectf( getwidth()-roundwidth* 2 , 0 , getwidth(), 0 +roundheight* 2 ), - 90 , 90 ); path.close(); canvas.drawpath(path, paint); } } |
定义一个attr.xml的文件,放在values目录下面,内容如下:
1
2
3
4
5
6
7
|
<?xml version= "1.0" encoding= "utf-8" ?> <resources> <declare-styleable name= "roundangleimageview" > <attr name= "roundwidth" format= "dimension" /> <attr name= "roundheight" format= "dimension" /> </declare-styleable> </resources> |
使用示例如下:
先要声明属性的名字空间:
然后再写跟一般定义view一样:
1
2
3
4
5
6
7
8
9
|
<cn.dotcreate.tt.ui.roundangleimageview android:id= "@+id/headiv" android:layout_width= "75dp" android:layout_height= "75dp" android:layout_centervertical= "true" android:layout_marginleft= "2dp" app:roundwidth= "10dp" app:roundheight= "10dp" android:src= "@drawable/default_head_icon" /> |
效果如图:
以上代码简单介绍了android自定义圆角imageview的相关知识,希望本文分享对大家有所帮助。