Android (57) 썸네일형 리스트형 AnimationDrawable 사용해서 애니메이션 만들기 1. 개요 화면에 애니메이션을 표현하는 경우가 종종 있습니다. 이 경우 AnimationDrawable을 사용하면 보다 쉽게 애니메이션을 화면에 표시할 수 있습니다. 2. 사용법 1) 이미지 만들기 먼저 화면에 사용할 이미지를 설정합니다. 저는 간편하게 아래 이미지를 사용했습니다. 2) 애니메이션 파일 만들기 drawble 폴더에 animation-list 파일을 만듭니다. 코드는 다음과 같습니다. 이때 oneshot 속성은 연속 재생 여부입니다. true로 설정하면 한 번만 애니메이션을 실행한 다음 멈춰있고, false로 설정하면 해당 애니메이션을 반복해서 재생합니다. 그리고 각 아이템을 만들어줍니다. 이때 하나의 아이템은 애니메이션에서 하나의 프레임이 됩니다. 각 속성은 다음과 같습니다. a. dra.. Databinding에 대해서 1. 개요 데이터와 뷰를 연결하는 작업을 레이아웃에서 처리하는 기술을 데이터바인딩이라고 부릅니다. 뷰 바인딩을 포함하는 개념이지만, 뷰 바인딩이 상대적으로 간단하며 퍼포먼스 효율이 좋고 용량이 절약된다는 이점이 있습니다. 따라서 단순히 findViewById를 대체하기 위해서라면 뷰 바인딩을 사용하는 것을 구글이 권장하고 있습니다. 2. 사용법 1) 레이아웃 먼저 바인딩할 레이아웃을 만들어줍니다. 이때 최상위 태그는 이어야 하며, 그렇지 않을 경우 에러가 발생합니다. 아래 코드처럼 layout 태그가 전체 레이아웃을 포괄해야 합니다. ... ... 2) build.gradle(app) 파일 build.gradle(app) 파일의 android 블록 안에 다음과 같은 코드를 추가합니다. buildFeatu.. ViewModel에 대해서 알아보자 1. ViewModel이 나오게 된 배경 ViewModel은 UI 관련 데이터를 저장하고 관리해주는 역할을 합니다. 앱을 만들 때 화면을 세로에서 가로로 회전하면 화면에 있던 데이터가 날라가는 경우가 있습니다. 화면이 전환될 때는 단지 방향만 바뀌는 것이 아니라 액티비티가 destroy 되었다가 다시 create 되는데, 이때 데이터가 날라가기 때문입니다. 이때 데이터를 보존하기 위해 savedInstanceState를 사용할 수 있습니다. 그러나 구글에서는 여기에 50k 미만의 데이터만 담도록 권장하고 있으며, 담을 수 있는 데이터의 형태도 제한되어 있습니다. 또한 onCreate() 메서드에서 작업을 처리해야 하기 때문에 UI 컨트롤러가 해야 할 일이 늘어나면서 화면을 띄우는 데 시간이 오래 걸립니다.. 커스텀 보틈시트(BottomSheet) 만들기 1. 레이아웃 파일 만들기 자유롭게 작성해주시면 됩니다. 저는 아래처럼 작성했습니다. 2. 클래스 생성 BottomSheetDialogFragment를 상속한 클래스를 생성해야 합니다. 저는 아래처럼 작성했습니다. class FirstStickerBottomSheet(val itemClick: (Int) -> Unit) : BottomSheetDialogFragment() { lateinit var firstOkay : AppCompatButton lateinit var firstCancel : AppCompatButton override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle.. 커스텀 스낵바, 커스텀 토스트 만들기 1. 커스텀 스낵바 만들기 private fun showSnackBar(view: View, message: String, action: String?, clickListener : View.OnClickListener?) { val snackbar = Snackbar.make(view, message, Snackbar.LENGTH_LONG) .setTextColor( ColorStateList.valueOf( ContextCompat.getColor(this, R.color.white))) .setActionTextColor(ColorStateList.valueOf( ContextCompat.getColor(this, R.color.mackduck_yellow))) snackbar.setBackgrou.. 안드로이드 스크린샷 감지 1. 개요 커스텀 갤러리를 만드는 경우, 스크린샷이 발생하면 해당 사진 또한 실시간으로 갤러리에 추가해야 할 수 있습니다. 저도 그렇게 구현했구요. 또는 스크린샷이 발생했을 때 특정 동작을 하도록 앱을 구현하고 싶은 경우도 있습니다. 지금부터 스크린샷을 감지하는 방법에 대해 순서대로 설명드리겠습니다. 2. 스크린샷 이벤트 감지 우선 전체 코드는 다음과 같습니다. val handler = Handler(Looper.getMainLooper()) contentObserver = object : ContentObserver(handler) { override fun onChange(selfChange: Boolean, uri: Uri?) { val regex = Regex(MediaStore.Images.Me.. 에디트텍스트(EditText) 관련 짜투리 지식 1 (실시간으로 쉼표 표시하기, 커서 커스텀, 동그란 커서 색상 변경) 1. 실시간으로 숫자에 쉼표 표시하기 화폐 단위를 입력할 경우 쉼표를 사용하면 좀 더 보기 편하게 만들 수 있습니다. 이 경우 먼저 NumberFormat 를 사용하면 됩니다. val price = binding.editText.text.toString().toInt() val formatter = DecimalFormat("#,###") as NumberFormat val priceText = formatter.format(price) + "원" binding.editText.text = priceText 먼저 editText에서 값을 가져온 후, NumberFormat을 사용해서 숫자 3개 마다 쉼표를 사용할 수 있도록 설정합니다. 이후 가져온 값에 해당 형식을 적용하고, 이를 editText에 적용.. 오픈소스 라이센스 명시 안녕하세요? 닉네임간편입니다. 앱을 개발하면서 오픈소스 라이브러리를 사용하는 경우가 많은데요, 실제 상용되고 있는 서비스에서도 오픈소스 라이브러리를 많이 활용합니다. 그런데 오픈소스 라이브러리도 마음대로 사용할 수는 없는데요, 라이센스를 명시해주어야 하기 때문입니다. 이번 시간에는 모든 라이센스에 대해서 다루어보기보다는, 오픈소스 라이브러리를 사용했을 때 어떤 식으로 라이센스를 명시해야 하는지에 대해서 말씀드리겠습니다. 1. 앱에서 명시 위 사진처럼 오픈소스 라이브러리 이름, 원문 주소, 원 저작자, 라이센스 종류 및 전문을 넣은 화면을 앱에서 볼 수 있도록 만들어주면 됩니다. 설정에서 클릭하도록 하시거나 따로 화면을 만드시면 될 것 같습니다. 2. 깃허브에 명시 깃허브의 경우 License 파일을 만들.. 이전 1 2 3 4 5 6 ··· 8 다음