반응형
SubsamplingScaleImageView는 Image Zoom in/out 이 가능한 라이브러리입니다.
이전에 포스팅한 NewsFeed 앱에서 주식차트를 넣어주다보니 해당 기능이 필요해서 포스팅합니다.
https://kakaroo.tistory.com/57
먼저, 라이브러리를 사용할 수 있게 build.gradle에 추가해 줍니다.
//image view 확대
implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.10.0'
<layout.xml>
<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
android:id="@+id/iv_stock_chart"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"/>
URL 에서 Image를 가져오는 함수를 만듭니다.
private fun getBitmapFromURL(src: String?): Bitmap? {
return try {
val url = URL(src)
val connection: HttpURLConnection = url.openConnection() as HttpURLConnection
connection.doInput = true
connection.connect()
val input: InputStream = connection.inputStream
val myBitmap = BitmapFactory.decodeStream(input)
myBitmap
} catch (e: IOException) {
e.printStackTrace()
Log.e(Common.MY_TAG, "getBitmapFromURL error: ${e.message}")
null
}
}
URL에서 bitmap을 가져오는 부분은 main thread에서 돌릴 경우, android.os.NetworkOnMainThreadException 가 발생하므로, 앞에서 배운 코루틴으로 실행해 줍니다.
//Image zoom in-out
val imageView: SubsamplingScaleImageView = mDialog.findViewById(R.id.iv_stock_chart)
CoroutineScope(Dispatchers.IO).launch {
val coroutine = async {
getBitmapFromURL(imgUrl)
}
val result = coroutine.await()
withContext(Dispatchers.Main) {
if(result != null) {
imageView.setImage(ImageSource.bitmap(result))
}
}
}
SubsamplingScaleImageView를 포함한 custom dialog를 띄워 봤습니다.
pinch-in 으로 zoom을 해 본 결과입니다.
오후장에 급상승했다가 윗꼬리 달고 내려왔네요. 대주주 블럭딜이거나, 개미 떨구기 일수도..
반응형
'Kotlin' 카테고리의 다른 글
생성자 역할을 하는 Factory 함수 (0) | 2022.04.30 |
---|---|
FrameLayout size/margin 동적변경 (0) | 2022.04.24 |
Animation (0) | 2022.04.18 |
object, companion object (0) | 2022.04.15 |
확장함수 (Extension Function) (0) | 2022.04.14 |