728x90
반응형
안드로이드에서 애니메이션을 사용할 수 있는 방법으로
에서 보면 사용법이 나와있다.
implementation 'com.airbnb.android:lottie:3.7.0'
를 추가해주고,
viewBinding {
enabled = true
}
뷰바인딩까지 설정을 추가해준다.
원하는 키워드를 입력해 가져오고 싶은 애니메이션을 선택하고,
json으로 다운받아준다.
Assets Folder를 추가해주고, 다운받은 json의 이름을 heart.json으로 변경한 뒤 폴더에 넣어준다.
이제 메인 코드를 살펴보자
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/animationView"
android:layout_width="0dp"
android:onClick="onClickButton"
android:layout_height="0dp"
app:layout_constraintWidth_percent="0.5"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:lottie_fileName="heart.json"
app:lottie_autoPlay="true"
app:lottie_loop="false"/>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.kt
import android.animation.ValueAnimator
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import com.example.kotlinlottietest.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
private var isHearting : Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
fun onClickButton(view: View) {
if (!isHearting) {
val animator = ValueAnimator.ofFloat(0f, 0.5f).setDuration(500)
animator.addUpdateListener {
binding.animationView.progress = it.animatedValue as Float
}
animator.start()
isHearting = true
Log.d("Lottie TEST", "좋아요 버튼을 누르면 하트가 나온다")
} else {
val animator = ValueAnimator.ofFloat(0.5f, 1f).setDuration(500)
animator.addUpdateListener {
binding.animationView.progress = it.animatedValue as Float
}
animator.start()
isHearting = false
}
}
}
메인 코드는 아래 블로그에서 가져왔다.
https://daldalhanstory.tistory.com/225
홈페이지에서 소스코드를 보면
위와 같이 나와 있어서 app:lottie_url="heart.json" 을 추가했지만, 이렇게 하면 아래처럼 오류가 뜬다.
android java.lang.IllegalStateException: Unable to parse composition
이유는
app:lottie_url="heart.json" 을 아래처럼 바꿔줘야 한다.
app:lottie_fileName="heart.json"
(중요 ☆☆☆☆☆☆☆☆)
실행 결과( 동영상이 안올라가서 사진 첨부)
전체 코드는
https://github.com/songmik/KotlinSimpleLottieTest
728x90
반응형
'안드로이드 스튜디오' 카테고리의 다른 글
[안드로이드 스튜디오] Http failed : java.net.unknownhostexception: Unable to resolve host “서버 주소”: No address associated with hostname (0) | 2023.01.11 |
---|---|
[안드로이드 스튜디오 코틀린] 최신버전 네이버 API 설정 (0) | 2022.11.27 |
[안드로이드 스튜디오] dagger-hilt build.gradle 설정 (0) | 2022.09.28 |
[안드로이드 스튜디오 코틀린] Activity에서 Fragment를 이용한 화면 전환 (1) | 2022.09.23 |
[안드로이드 스튜디오] OkHttp 로그 해석 (0) | 2022.09.13 |