@@ -12,10 +12,7 @@ import android.graphics.Rect
12
12
import android.graphics.drawable.NinePatchDrawable
13
13
import android.util.DisplayMetrics
14
14
import timber.log.Timber
15
- import java.io.BufferedInputStream
16
15
import java.io.File
17
- import java.io.FileInputStream
18
- import java.io.IOException
19
16
import java.nio.ByteBuffer
20
17
import java.nio.ByteOrder
21
18
@@ -44,9 +41,9 @@ object NinePatchBitmapFactory {
44
41
45
42
private fun createNinePatchWithCapInsets (
46
43
res : Resources ? ,
47
- bitmap : Bitmap ? ,
48
- rangeListX : List <Range >? ,
49
- rangeListY : List <Range >? ,
44
+ bitmap : Bitmap ,
45
+ rangeListX : List <Range >,
46
+ rangeListY : List <Range >,
50
47
srcName : String? ,
51
48
): NinePatchDrawable {
52
49
val buffer =
@@ -55,12 +52,12 @@ object NinePatchBitmapFactory {
55
52
}
56
53
57
54
private fun getByteBuffer (
58
- rangeListX : List <Range >? ,
59
- rangeListY : List <Range >? ,
55
+ rangeListX : List <Range >,
56
+ rangeListY : List <Range >,
60
57
): ByteBuffer {
61
58
val buffer =
62
59
ByteBuffer
63
- .allocate(4 + 4 * 7 + 4 * 2 * rangeListX!! .size + 4 * 2 * rangeListY!! .size + 4 * 9 )
60
+ .allocate(4 + 4 * 7 + 4 * 2 * rangeListX.size + 4 * 2 * rangeListY.size + 4 * 9 )
64
61
.order(
65
62
ByteOrder .nativeOrder(),
66
63
)
@@ -104,7 +101,7 @@ object NinePatchBitmapFactory {
104
101
private fun checkBitmap (bitmap : Bitmap ): RangeLists {
105
102
val width = bitmap.width
106
103
val height = bitmap.height
107
- val rangeListX: MutableList <Range > = ArrayList ()
104
+ val rangeListX = arrayListOf <Range >()
108
105
var pos = - 1
109
106
for (i in 1 until width - 1 ) {
110
107
val color = bitmap.getPixel(i, 0 )
@@ -119,19 +116,13 @@ object NinePatchBitmapFactory {
119
116
}
120
117
} else {
121
118
if (pos != - 1 ) {
122
- val range = Range ()
123
- range.start = pos
124
- range.end = i - 1
125
- rangeListX.add(range)
119
+ rangeListX.add(Range (pos, i - 1 ))
126
120
pos = - 1
127
121
}
128
122
}
129
123
}
130
124
if (pos != - 1 ) {
131
- val range = Range ()
132
- range.start = pos
133
- range.end = width - 2
134
- rangeListX.add(range)
125
+ rangeListX.add(Range (pos, width - 2 ))
135
126
}
136
127
for (range in rangeListX) {
137
128
Timber .v(" (" + range.start + " ," + range.end + " )" )
@@ -150,27 +141,18 @@ object NinePatchBitmapFactory {
150
141
}
151
142
} else {
152
143
if (pos != - 1 ) {
153
- val range = Range ()
154
- range.start = pos
155
- range.end = i - 1
156
- rangeListY.add(range)
144
+ rangeListY.add(Range (pos, i - 1 ))
157
145
pos = - 1
158
146
}
159
147
}
160
148
}
161
149
if (pos != - 1 ) {
162
- val range = Range ()
163
- range.start = pos
164
- range.end = height - 2
165
- rangeListY.add(range)
150
+ rangeListY.add(Range (pos, height - 2 ))
166
151
}
167
152
for (range in rangeListY) {
168
153
Timber .v(" (" + range.start + " ," + range.end + " )" )
169
154
}
170
- val rangeLists = RangeLists ()
171
- rangeLists.rangeListX = rangeListX
172
- rangeLists.rangeListY = rangeListY
173
- return rangeLists
155
+ return RangeLists (rangeListX, rangeListY)
174
156
}
175
157
176
158
private fun trimBitmap (bitmap : Bitmap ): Bitmap {
@@ -179,42 +161,31 @@ object NinePatchBitmapFactory {
179
161
return Bitmap .createBitmap(bitmap, 1 , 1 , width - 2 , height - 2 )
180
162
}
181
163
182
- fun loadBitmap (file : File ? ): Bitmap ? {
183
- var bis: BufferedInputStream ? = null
184
- try {
185
- bis = BufferedInputStream (FileInputStream (file))
186
- return BitmapFactory .decodeStream(bis)
187
- } catch (e: IOException ) {
188
- e.printStackTrace()
189
- } finally {
190
- try {
191
- bis!! .close()
192
- } catch (e: Exception ) {
164
+ fun loadBitmap (file : File ): Bitmap ? =
165
+ runCatching {
166
+ file.inputStream().buffered().use {
167
+ BitmapFactory .decodeStream(it)
193
168
}
194
- }
195
- return null
196
- }
169
+ }.getOrNull()
197
170
198
- fun getDensityPostfix (res : Resources ): String? {
199
- var result: String? = null
171
+ fun getDensityPostfix (res : Resources ): String? =
200
172
when (res.displayMetrics.densityDpi) {
201
- DisplayMetrics .DENSITY_LOW -> result = " ldpi"
202
- DisplayMetrics .DENSITY_MEDIUM -> result = " mdpi"
203
- DisplayMetrics .DENSITY_HIGH -> result = " hdpi"
204
- DisplayMetrics .DENSITY_XHIGH -> result = " xhdpi"
205
- DisplayMetrics .DENSITY_XXHIGH -> result = " xxhdpi"
206
- DisplayMetrics .DENSITY_XXXHIGH -> result = " xxxhdpi"
173
+ DisplayMetrics .DENSITY_LOW -> " ldpi"
174
+ DisplayMetrics .DENSITY_MEDIUM -> " mdpi"
175
+ DisplayMetrics .DENSITY_HIGH -> " hdpi"
176
+ DisplayMetrics .DENSITY_XHIGH -> " xhdpi"
177
+ DisplayMetrics .DENSITY_XXHIGH -> " xxhdpi"
178
+ DisplayMetrics .DENSITY_XXXHIGH -> " xxxhdpi"
179
+ else -> null
207
180
}
208
- return result
209
- }
210
181
211
- class RangeLists {
212
- var rangeListX: List <Range >? = null
213
- var rangeListY: List <Range >? = null
214
- }
182
+ class RangeLists (
183
+ val rangeListX : List <Range >,
184
+ val rangeListY : List <Range >,
185
+ )
215
186
216
- class Range {
217
- var start = 0
218
- var end = 0
219
- }
187
+ data class Range (
188
+ val start : Int ,
189
+ val end : Int ,
190
+ )
220
191
}
0 commit comments