Kotlin

SubsamplingScaleImageView

kakaroo 2022. 4. 23. 11:42
반응형

article logo

 

SubsamplingScaleImageView는 Image Zoom in/out 이 가능한 라이브러리입니다.

 

이전에 포스팅한 NewsFeed 앱에서 주식차트를 넣어주다보니 해당 기능이 필요해서 포스팅합니다.

https://kakaroo.tistory.com/57

 

NewsFeed - JSoup / Nested RecyclerView

관심있는 뉴스 정보를 매시간마다 서버로 모아 퇴근시에 한번에 보는 어플리케이션을 만들어 보려고 합니다. 서버의 필요성은 현재 찾지 못해서, 현재 시간대의 기사를 검색할 때마다 보여주는

kakaroo.tistory.com

 

 

먼저, 라이브러리를 사용할 수 있게 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을 해 본 결과입니다.

zoom-in

오후장에 급상승했다가 윗꼬리 달고 내려왔네요. 대주주 블럭딜이거나, 개미 떨구기 일수도..

반응형

'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