본문 바로가기

Android

(30)
[Android] Canvas.drawText() 여러줄 그리기 getString() 으로 가져온 문자열이 있다. '\n' 이스케이프문자도 분명 들어가있었는데 drawText() 했을 때 한 줄로 출력되는 현상이었다. 해결방법 Parameters text : 이스케이프문자가 포함된 출력할 문자열 Canvas : onDraw() 의 Canvas 참조 Paint : 전역 변수 참조(텍스트 스타일) x : 텍스트를 그릴 x 좌표 y : 텍스트를 그릴 y 좌표 private void drawTextMultiline(String text, float x, float y, Canvas canvas, Paint paint) { String[] lines = text.split("\n"); for (String line : lines) { canvas.drawText(line, x..
[Android]SeekBar 커스텀하기 두번째 찾아보게 돼서 필수요소만 정리하기로 했다. https://www.tutorialsbuzz.com/2019/09/android-styling-seekbar-thumb-and-progressTrack.html Android Styling SeekBar Thumb and Progress Track Android Styling SeekBar Thumb and Progress Track , Android Custom Seekbar www.tutorialsbuzz.com 여기 글 보고 실습한 걸 소개하는 즈음이다. 만들고자 한 것. 디자인으로 받은 그라데이션 프로그레스(Progress)에 단색 배경(Track), 그라데이션 끝색이 반영된 Thumb 1. Thumb 만들기 - Ripple 의 color 속성은..
[Android] 라이브러리 급의 커스텀뷰 만들기 프로젝트(RulerPicker) 일하다가 자 형태의 눈금 스크롤이 필요했다. 라이브러리를 쓸까 하다가 좀 찾아보니 원하는대로 반영되는걸 찾다가는 스트레스받을게 뻔해보여서 까짓거 걍 만들기로 했다. 근데 만들다보니 꽤 잘 만들어지는게 아닌가? 그리 복잡하지도 않고, 라이브러리급으로 만들어서 배포해봐야겠다 싶었다. 작업기간 : 약 2일 조건 : - 가로스크롤만 반영한다. - 1 마다 눈금 하나를 그린다. - 5 마다 긴 눈금 하나를 그린다. - 최소/최대값을 정할 수 있어야 한다. - 콜백으로 변한 값을 넘길 수 있어야 한다. 결과물 이미지는 아래와 같다. 작업순서 1. 커스텀뷰 특성 정리 뭔가 만들려면 이해해야 한다. 해당 'RulerPicker'는 - 어느 간격 당 눈금을 그릴지 정의해야 한다. - 간격 당 어느정도 값인지 정의해야 ..
[Android] 진동컨트롤(Vibrator) https://developer.android.com/reference/android/os/Vibrator Vibrator | Android Developers developer.android.com 자 형태의 커스텀뷰를 만들고, 눈금을 한 칸 이동할 때마다 진동효과를 주고 싶었다. 커스텀뷰는 콜백으로 칸이 이동될 때마다 정수형 값을 넘겨주는 구조였다. 값계산과 렌더링이 모두 처리된 다음 콜백으로 넘겨주는 것이기 때문에 View 가 아닌 Activity 에 진동관련 코드를 넣었다.(역할분담) 1. onCreate 이후에 Vibrator 객체를 만든다. private Vibrator vibrator = null; ... @Override protected void onResume() { super.onRe..
[Android] 커스텀 뷰, 원형 프로그레스 구현기 원형으로 생긴 프로그레스(그림과 다르게 진행정도에 따라 한 칸씩 채워지는 효과)를 커스텀 뷰로 구현할 일이 생겼다. 기존 라이브러리를 써도 어찌저찌 되겠지만 변형이 많이 생길수도 있는 부분이라서 커스텀으로 구현해놓는게 속편하겠다고 판단했다. 1. 원에서 막대의 각 위치를 구하기 위한 각도 계산 정의 원의 중심을 기점으로 반지름과 프로그레스 막대의 길이가 정의됐다고 했을 때 반지름 = r 막대의 길이 = h 라고 하겠다. 여기서 radian 의 개념이 필요한데, degree 단위가 평소에 쓰는 60분법, radian 단위는 반지름 대비 호의 길이인 호도법이다. 반지름 대비 호의 길이에 따른 각이라서 호도법이라 한다. 만약 반지름과 특정 구간의 호 길이가 같다면 1 radian 이 된다. 서로 변환하는 식은..
[Firebase] Firestore 보안 규칙 이해하기 https://unknown-alchemist.tistory.com/51 우선 파이어스토어는 위처럼 생긴 json문서 트리다. 그런데 이번에 제대로 작업을 하려고 하니 보안규칙이 또 헷갈렸다. 이번엔 완전판 느낌으로 정리해보려 한다. 사실은 크게 두 가지만 알면 된다. 문법이야 딱보면 알기 때문에 match문을 어떻게 구조적으로 활용해야 하는지, 조건으로 뭘 걸어야 제대로 걸어야 하고 각 키워드가 무슨 의미인지! 1. match 문의 의미 자, 아래 코드가 프로젝트단위의 파이어스토어의 어떠한 문서에 대한 트랜잭션도 조건없이 허용하겠다는 코드다. service cloud.firestore { match /databases/{database}/documents { allow read, write : if t..
[Android] Snackbar(스낵바) 띄우기 토스트보다 스낵바가 더 맛있... 아니 더 멋있고 유용하다고 생각한다. 토스트는 뭐 Toas..까지만 쳐도 show 메서드까지 붙여서 자동완성을 해주니 그렇게 어렵다고 느껴지지 않지만 Snackbar는 한방에 쓰기엔 헷갈릴 수 있다. * 스낵바는 머터리얼에 포함된 UI다. (토스트가 widget 에 포함된 것과 대비된다) 1. 스낵바 객체 만들기 Snackbar.make() 메서드를 사용해서 리턴되는 Snackbar 를 얻으면 된다. Snackbar snackbar = Snackbar.make(SettingActivity.this, settingLayout, getString(R.string.all), Snackbar.LENGTH_SHORT); make 메서드는 이렇게 생겼다. com.google.and..
[Android] Read contacts(연락처 가져오기) 지인을 관리하는 앱을 개발 중이다. 맨 처음 연락처를 가져오는 정도가 글로벌 적으로 적당할 것 같아서 사용자에게 한 번 물어본 뒤 권한을 요청하고 가져와서 db에 저장할 계획이다. 그러면 연락처 정보는 어떻게 가져올 수 있을까? 1. 권한 추가 AndroidManifest.xml , 태그 안에 0) { while (cursor.moveToNext()) { String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); Uri p..