예제 코드1
val floatingButton = binding.floatingButton
val inAnimation = AlphaAnimation(0f, 1f).apply { duration = 500 }
val outAnimation = AlphaAnimation(1f, 0f).apply { duration = 500 }
AlphaAnimation이라는 친구가 있는데 이걸 주면 애니메이션을 줄 수 있는 것 같다.
0f, 1f 순으로 가면 투명에서 불투명으로 바뀌며,
반대로 하면 불투명에서 투명으로 바뀐다.
뒤에 duration은 지속 시간?으로 알고 있다.
startAnimation(outAnimation)
하면 fade out 애니메이션이 실행된다.
onBackPressed()를 오버라이드 하고 그 안에 다이얼로그 넣으면 된다.
// 채널 생성
val channelId = "channel"
val channelName = "My Channel"
val channel = NotificationChannel(
channelId,
channelName,
NotificationManager.IMPORTANCE_DEFAULT // 여기는 중요도 설정
).apply {
setShowBadge(true)
// 배지 설정 (알림 하나씩 쌓일 때마다 아이콘 위에 숫자 뜨게)
val uri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
// 알림 소리를 기본 소리로 설정
}
setOnCancelListener 쓰고 중괄호 안에 아무것도 안 넣으니 잘 되었다..?
floatingButton.setOnClickListener {
binding.recyclerView.smoothScrollToPosition(0) // 0번 인덱스는 가장 위에 있는 아이템아다!
}
binding.recyclerView.layoutManager = LinearLayoutManager(this)
// this 뒤에 숫자를 넣어서 Grid 설정이 가능하다.
// 2를 넣으면 한 아이템만 나오고 그게 수직으로 쭈욱 나오던 것이 한 줄에 두 개의 아이템이 들어가는 것으로 바뀐다.
binding.recyclerView.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))
// 당연히 가로 방향 RecyclerView라면 horizontal 속성 써야 한다.
RegisterForActivityResult 쓰면 된다.
변수를 선언하여 그 아이템의 위치를 getOrNull로 갖고 와서 써야 한다.
당연히 위치를 position 값을 가지고 찾아야 한다.
// if문 안에 들어가는 RecyclerView 스크롤 상태 확인하는 코드
!binding.recyclerView.canScrollVertically(-1) && newState == RecyclerView.SCROLL_STATE_IDL
// 스크롤이 멈춰 있고, 위치가 최상단인 경우를 나타냄
if (!item!!.dHeartCheck) {
binding.ivBottomHeart.setImageResource(R.drawable.heart)
} else {
binding.ivBottomHeart.setImageResource(R.drawable.heart_full)
}
// 좋아요 버튼을 눌렀을 때 좋아요 버튼 이미지, 좋아요 수를 결정 하는 부분
binding.ivBottomHeart.setOnClickListener { view ->
if (!item.dHeartCheck) {
binding.ivBottomHeart.setImageResource(R.drawable.heart_full)
count++
item.dHeart = count // 디테일 페이지에서만 쓸 것이라면 이 코드는 안 써도 된다.
item.dHeartCheck = true
// 이 친구는 Snack Bar
Snackbar.make(view, "관심 목록에 추가\n좋아요 개수 : $count", Snackbar.LENGTH_SHORT).show()
} else {
binding.ivBottomHeart.setImageResource(R.drawable.heart)
count--
item.dHeart = count // 디테일 페이지에서만 쓸 것이라면 이 코드는 안 써도 된다.
item.dHeartCheck = false
Snackbar.make(view, "관심 목록에서 제거\n좋아요 개수 : $count", Snackbar.LENGTH_SHORT).show()
}
}
이미지 뷰를 넣고 이미지 곡률 설정했는데 적용이 안 된다면?
CircleImageView나 RoundImageView를 쓰면 된다.
<fragment
android:id="@+id/my_static_fragment"
android:name="com.example.MyFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
// 이 방법이 가장 추천되는 방법이다.
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
기존 Fragment를 지우고 새 Fragment를 삽입한다.
// 더 편한 방식
val myPageFragment = MyPageFragment()
parentFragmentManager.commit {
setReorderingAllowed(true)
replace(R.id.fragment_container, myPageFragment)
addToBackStack(null)
}
// 기본 방식
val myPageFragment = MyPageFragment()
val transaction = parentFragmentManager.beginTransaction()
transaction.setReorderingAllowed(true)
transaction.replace(R.id.fragment_container, myPageFragment )
transaction.addToBackStack(null)
transaction.commit()
기존 Fragment 위에 새 Fragment를 겹치는 방식
val myPageFragment = MyPageFragment()
parentFragmentManager.commit {
setReorderingAllowed(true)
add(R.id.fragment_container, myPageFragment)
addToBackStack(null) // 백 스택에 추가하여 뒤로 가기 버튼을 사용할 수 있게 함
}
당연히 지울 수도 있는데 특정 Fragment만 지우는 방식
val myPageFragment = MyPageFragment()
parentFragmentManager.commit {
setReorderingAllowed(true)
remove(R.id.fragment_container, myPageFragment)
addToBackStack(null)
}
Fragment를 잠시 숨겨놨다가 다시 보여줌
val myPageFragment = MyPageFragment()
parentFragmentManager.commit {
setReorderingAllowed(true)
show(R.id.fragment_container, myPageFragment)
}
이건 반대로 Fragment를 숨기는 과정
val myPageFragment = MyPageFragment()
parentFragmentManager.commit {
setReorderingAllowed(true)
show(R.id.fragment_container, myPageFragment)
}
BottomNavigationView = 하단에 메뉴 버튼을 누르면 해당하는 페이지로 이동할 수 있게 하는 것
Drawer = 상단 바의 메뉴 버튼을 누르면 옆에서 마치 서랍처럼 열리는 메뉴들. 거기서 메뉴를 선택하면 해당하는 페이지가 보여지는 것
TabLayout + ViewPager2 (1도 있지만 지금은 잘 쓰지 않는다.) = 위에 메뉴들을 고를 수 있고, 페이지를 스크롤 하거나 TabLayout에서 선택하면 원하는 페이지가 나온다.
이 중 위의 두 가지는 New Project를 만들 때 따로 선택할 수 있다.