이번 시간에는 탭 전환 시 부자연스러운 부분을 애니메이션을 통해서 해결해보도록 하겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.06.15 - [안드로이드] - [안드로이드 코틀린] Tab Custom Animation part2 - 탭 기능 구현
[안드로이드 코틀린] Tab Custom Animation part2 - 탭 기능 구현
이번 시간에는 탭을 누르면 선택된 탭과 선택되지 않은 탭을 구별해주고, 탭 별로 화면도 보여주겠습니다. 이전 포스팅은 아래 링크를 들어가시면 됩니다. 2022.06.14 - [안드로이드] - [안드로이드
aries574.tistory.com
- 설명 -
1. selectedTabNumber = 1
현재 탭 위치를 담을 변수
2. slideTo
이동할 위치 값 담을 변수
3. translateAnimation.duration
애니메이션 구현 시간(1000 = 1초)
4. onAnimationEnd
애니메이션 끝나고 실행되는 함수
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
//현재 탭 위치
private var selectedTabNumber = 1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//binding 초기화
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
//디폴트 1번탭
selectTab(1)
//탭1 클릭 이벤트
binding.tabItem1.setOnClickListener {
selectTab(1)
}
//탭2 클릭 이벤트
binding.tabItem2.setOnClickListener {
selectTab(2)
}
//탭3 클릭 이벤트
binding.tabItem3.setOnClickListener {
selectTab(3)
}
}
//탭 선택 이벤트
private fun selectTab(tabNumber: Int){
var selectedTextView: TextView
var nonSelectedTextView1: TextView
var nonSelectedTextView2: TextView
var selectedFragment: Fragment
if(tabNumber == 1){
selectedTextView = binding.tabItem1
nonSelectedTextView1 = binding.tabItem2
nonSelectedTextView2 = binding.tabItem3
selectedFragment = OneFragment()
}else if(tabNumber == 2){
selectedTextView = binding.tabItem2
nonSelectedTextView1 = binding.tabItem1
nonSelectedTextView2 = binding.tabItem3
selectedFragment = TwoFragment()
}else{
selectedTextView = binding.tabItem3
nonSelectedTextView1 = binding.tabItem1
nonSelectedTextView2 = binding.tabItem2
selectedFragment = ThreeFragment()
}
//프래그먼트 설정
supportFragmentManager.beginTransaction()
.setReorderingAllowed(true)
.replace(R.id.fragmentContainer, selectedFragment, null)
.commit()
//(선택탭 번호 - 현재 위치번호) * 텍스트뷰 넓이값
var slideTo: Float = ((tabNumber - selectedTabNumber) * selectedTextView.width).toFloat()
var translateAnimation = TranslateAnimation(0F, slideTo, 0F, 0F)
//구현 시간(1000 = 1초)
translateAnimation.duration = 300
//선택 번호에 따른 애니메이션 적용
when(selectedTabNumber){
1 -> binding.tabItem1.startAnimation(translateAnimation)
2 -> binding.tabItem2.startAnimation(translateAnimation)
3 -> binding.tabItem3.startAnimation(translateAnimation)
}
//애니메이션 이벤트
translateAnimation.setAnimationListener(object : Animation.AnimationListener{
override fun onAnimationEnd(p0: Animation?) {
//애니메이션 끝나면 실행
//선택 탭 설정
selectedTextView.setBackgroundResource(R.drawable.round_back_white_100)
selectedTextView.setTypeface(null, Typeface.BOLD)
selectedTextView.setTextColor(Color.BLACK)
//비선택 탭 설정
nonSelectedTextView1.setBackgroundColor(ContextCompat.getColor(applicationContext,
android.R.color.transparent))
nonSelectedTextView1.setTypeface(null, Typeface.NORMAL)
nonSelectedTextView1.setTextColor(Color.parseColor("#80FFFFFF"))
nonSelectedTextView2.setBackgroundColor(ContextCompat.getColor(applicationContext,
android.R.color.transparent))
nonSelectedTextView2.setTypeface(null, Typeface.NORMAL)
nonSelectedTextView2.setTextColor(Color.parseColor("#80FFFFFF"))
}
override fun onAnimationStart(p0: Animation?) {}
override fun onAnimationRepeat(p0: Animation?) {}
})
//탭 번호 선택탭 변수에 담기
selectedTabNumber = tabNumber
}
}
2022.06.02 - [안드로이드] - [안드로이드 코틀린] DataBinding 컴포넌트 쉽게 접근하는 방법
[안드로이드 코틀린] DataBinding 컴포넌트 쉽게 접근하는 방법
이번 시간에는 Databinding를 통해 레이아웃 컴포넌트에 쉽게 접근하는 방법을 코틀린으로 구현해보도록 하겠습니다. 목차 1. 실행 화면 2. dataBinding 설정 3. 메인 화면 구성 activity_main.xml 4. 메인 코
aries574.tistory.com
2022.05.27 - [안드로이드] - [안드로이드 코틀린] 함수(function) 만드는 방법 part3 - 단일 표현식
[안드로이드 코틀린] 함수(function) 만드는 방법 part3 - 단일 표현식
이번 시간에는 return 함수를 간단하게 표현하는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 메인 화면 구성 activity_main.xml 3. 메인 코드 구현 MainActivity.java 1. 실행 화면 2. 메..
aries574.tistory.com
2022.06.06 - [안드로이드] - [안드로이드 코틀린] 커스텀 달력 만드는 방법 part1 화면 구성
[안드로이드 코틀린] 커스텀 달력 만드는 방법 part1 화면 구성
이번 시간부터 코틀린 버전 커스텀 달력을 만들어보겠습니다. 이번 포스팅은 화면 구성입니다. 목차 1. 실행 화면 2. dataBinding 설정 3. 메인 화면 구성 activity_main.xml 1. 실행 화면 2. dataB..
aries574.tistory.com
[안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part2 - 메인 화면과 메인 액티비티 (0) | 2022.06.18 |
---|---|
[안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정 (0) | 2022.06.17 |
[안드로이드 코틀린] Tab Custom Animation part2 - 탭 기능 구현 (0) | 2022.06.15 |
[안드로이드 코틀린] Tab Custom Animation part1 - 화면 구성 및 설정 (0) | 2022.06.14 |
[안드로이드 코틀린] 커스텀 달력 만드는 방법 part8 이번 달만 색상 진하게 변경하기 (2) | 2022.06.13 |
댓글 영역