마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 화면 구성?

0 추천

btnF를 누르면 gg라는 짤(gif)이 먼저 실행되고 if문을 실행시키고 싶습니다. 어떻게 해야하나요?

 

btnF.setOnClickListener {
            Glide.with(this).load(R.raw.gg).into(imgFB)
            val num = random.nextInt(2)
            coin=0
            if(num==coin){
                imgFB.setImageResource(R.drawable.front)
                Toast.makeText(applicationContext, "정답", Toast.LENGTH_SHORT).show()
            }
            else{
                imgFB.setImageResource(R.drawable.back)
                Toast.makeText(applicationContext, "땡", Toast.LENGTH_SHORT).show()
            }

 

 

개미1 (1,260 포인트) 님이 2021년 12월 10일 질문

1개의 답변

0 추천

이미지가 다 로딩되고 나서 처리하셔야 하므로 Async로 동작을 해야 합니다. 아마도 RequestListener라는 걸 구현해서 이미지가 다 로딩된 걸 캡쳐하셔야 할 듯 합니다.

https://bumptech.github.io/glide/javadocs/440/com/bumptech/glide/request/RequestListener.html

아래의 블로그에 예제가 나오네요.

https://medium.com/mobile-app-development-publication/glide-image-loader-the-basic-798db220bb44

val requestListener = object: RequestListener<Drawable>() {
      override fun onLoadFailed(e: GlideException?,
        model: Any, target: Target<Drawable>,
        isFirstResource: Boolean): Boolean {
      
       }

      override fun onResourceReady(resource: Drawable,
        model: Any, target: Target<Drawable>,
        dataSource: DataSource,
        isFirstResource: Boolean): Boolean {
            updateAnsweredImage()
     }
}

private fun updateAnsweredImage() {
      if(num==coin){
                imgFB.setImageResource(R.drawable.front)
                Toast.makeText(applicationContext, "정답", Toast.LENGTH_SHORT).show()
            }
            else{
                imgFB.setImageResource(R.drawable.back)
                Toast.makeText(applicationContext, "땡", Toast.LENGTH_SHORT).show()
            }
}


Glide.with(this)
        .load(R.raw.gg)
       .listener(requestListener)
       .into(imageFB)

 

그런데 이미지가 .gif이므로 실행되는데 약간의 시간이 필요하므료, .git가 끝나는 시간정도의 딜레이를 주시던가 아니면, gif의 프페임수 등을 체크하셔 모든 프레임을 보여주는데 걸리는 시간을 체크하셔야 겠죠. 

spark (227,510 포인트) 님이 2021년 12월 10일 답변
spark님이 2021년 12월 10일 수정
...