Android 버튼에 Ripple Effect를 주는 방법에 대해서 알아보도록 하겠습니다. 먼저 결론부터 말해보자면, 2가지 방법을 추천합니다. 1) MaterialButton, MaterialCardView 를 사용하는 방법 (Android Support Design 라이브러리에서 제공) 2) xml을 사용하는 방법 앱 개발을 해보면서 적용해본 버튼 종류들과 Ripple 효과를 적용한 코드를 살펴보겠습니다. 1. 텍스트만 들어가 있는 버튼 필수 속성들은 다음과 같습니다. text: 버튼 문구를 지정합니다. backgroundTint: 백그라운드 색상을 지정합니다. (background 아님을 주의) rippleColor: Ripple Effect 색상을 지정합니다. cornerRadius: 모서리의 둥..
안드로이드를 개발하다 보면, 다양한 Animation 효과를 내고 싶어서 구글링 하다보면 너무 다양한 API들이 있는 것을 확인할 수 있습니다. 그래서! 그것을 정리해보고자 합니다. 가장 처음 등장한 API 순으로 정리해 보겠습니다. 1. View Animations (android.view.animation) Api 1부터 존재해온 가장 오래된 방식으로, 현재는 Deprecated 가 되려고 한다. (실제로 스튜디오에서 Deprecated가 뜨지는 않음) 렌더링 방식: 안드로이드의 모든 뷰가 그렇듯이 measure -> layout -> draw 방식을 거친다. 불행히도, Animation은 Draw 단계에서만 실행된다. 즉, Deferring rendering 도 불가능하고, 실제로 버튼의 위치를 바..
소년 산티아고는 책을 베개삼아 아무데서나 잠을 청하며 양치기 일을 하며 살고 있다. 그러던 어느 날, 반복되는 꿈을 꾸게 된다. 어느 소년이 자기 손을 잡고 이끌어가며 이집트 피라미드에 보물이 있을 거라고 한다. 그렇게 산티아고의 피라미드를 찾아가는 여정이 시작된다. 산티아고에게는 꿈속의 보물을 찾아나서는 것이 그의 목표이자 자아의 신화이다. 평생 모은 돈을 도둑 맞고, 현재의 행복에 젖어 자신의 목표를 조금 미뤄도 되지 않을까 라는 번뇌의 과정이 나온다. 소설을 읽으면서 내 인생의 여정에서 느꼈던 고민과 결정을 다시 돌아보게 한다. 우리는 모두 미래를 보고 싶어 한다. 행복했으면 하고 행복해야할 미래를 꿈꾼다. 피라미드를 찾아가는 중에 사막의 오아시스에 머물게 되었을 때, 낙타 인솔자가 해준 이야기가 ..
* 기존에 dataBinding { enabled = true } 가 활성화 되지 않았던 프로젝트에서 Binding 클래스로 전환시에 주의사항! 자동으로 만들어주는 Binding 클래스는 xml 파일을 만들면서 같이 만들어 준다. 그런데, dataBinding 옵션을 켜지 않은 상태에서 만들어 놓았던 xml 파일은 Binding 클래스를 생성해 주지 않았기에 삭제하고 다시 생성해야만 Binding 클래스가 만들어진다. (이거때문에 반나절의 삽질 시간이 허허) 출처 https://codelabs.developers.google.com/codelabs/android-databinding/#0 Android Data Binding Congratulations! You completed the codelab, ..
질문: 10000000 까지의 소수 갯수는? 답: 664579 풀이 알고리즘 1) : 3 ~ 목표지점 까지 for문을 돌고, 하나하나 소수 데이터 List를 또 돌면서 나누어 나머지가 없는지 체크한다. : n*n val primeList = ArrayList().apply { add(2) } val goalNumber = 100000000 for (num in 3..goalNumber) { /*println("num: $num")*/ var isPrime = true primeList.forEach { if (num % it == 0) { isPrime = false return@forEach } } if (isPrime) primeList.add(num) } println("prime count: ${..
다른 앱에서 접근 불가능한 고유 앱 영역. (다른앱과 공유 안된다.) * 사용 함수 getFilesDir() : 앱과 고유하게 연결된 파일 시스템의 디렉터리를 표시하는 File 개체를 반환 getDir(name, mode) : 앱의 고유한 파일 시스템 디렉터리 내에 새 디렉터리를 생성하거나 기존 디렉터리를 엽니다. getCacheDir() : 앱과 고유하게 연결된 파일 시스템의 캐시 디렉터리를 표시하는 File 개체를 반환 이 디렉터리를 임시파일용으로 정기적으로 지워야하고, 디스크 공간이 부족해지면 시스템에서 알아서 삭제한다. * 사용자에게 받아야 할 권한 종류: 없음 * 예시 코드 fun saveInternalStorage(context: Context, fileName: String, bitmap: ..