아주 오랜만에 포스팅을 하게 됐네요
그동안 다른 프로젝트로 매우 바뻤던 관계로 한동안 포스팅을 못했는데 요즘 짬이 나서 간단하게 앱을 만들고 출시까지 하였습니다.
그동안은 앱을 만들긴했어도 직접 마켓에 올려본적은 없었고 대부분 정부기관 앱이다 보니 광고를 달아본적이 없었는데 실제로 광고도 달아보고 마켓에 등록도 해봐야 할것같아 아주 간단한 앱을 만들어서 진행해 보았습니다.
이번에 만든 앱은 명언, 고사성어, 속담을 보여주는 아주 흔한 앱입니다.
이런 앱을 선택한 이유는 SQLite DB를 통해서 명언이나 고사성어 등을 저장하고 불러오게 하면 되기때문에 별도의 서버가 필요없고 인터넷이 안되는 환경에서도 동작할 수 있게 하기 위해서 입니다.
이러한 이유로 빠른 개발이 가능할듯하더라구요
그래도 뭔가 특색을 줘야할거 같아 매일 한번 오늘의 명언을 선택해서 보여줌으로써 마치 포춘쿠키를 뽑는 듯한 느낌을 주고 선택한 명언을 위젯을 통해 바탕화면에서 보여줄수 있도록 하였습니다.
실제로 코딩기간은 퇴근이후 틈틈히 한거라 2주 정도 걸린듯한데 자료(명언, 고사성어, 속담 등) 모우고 배경으로 보여줄 이미지 모우고 하는게 거의 한달 정도 걸린 듯합니다. ㅠㅠ
자~ 이제 우리는 개발자이니까 사용자입장이 아닌 개발자 입장에서 앱을 띁어보도록 하겠습니다.
1. 인트로 화면
- 처음 실행이 되면 Today's Saying 이라는 타이틀의 위에서 아래로 떨어지고 튕기면서 가운데 배치를 합니다.
=> 애니메이션 효가 중에 translate를 위에서 아래로 지정하고 interpolator 값을 bounce_interpolator로 주면 마지막에 공이 튕기듯이 하다가 멈추는 효과를 주었구요
- 앱을 최초로 실행을 하면 assets에 넣어두었던 SQLite DB파일을 내부저장소로 복사를 하고 이후 부터는 테이블에 있는 명언, 고사성어, 속담 등을 리스트 변수에 넣어 두는 작업을 합니다.
2. 오늘의 명언 뽑기
- 오늘의 명언은 오늘날짜로 저장된 명언이 없으면 오늘의 명언 팝업창이 뜨도록 했고 저장된 명언이 없으면 그냥 메인화면으로 진행됩니다.
=> 저장여부 체크는 그냥 간단하게 SharedPreferences 클래스를 이용하여 뽑기를 했으면 시스템 날짜와 명언 번호를 저장하고 이후에 이걸 비교하는 방식으로 처리했습니다.
- 팝업창하고 카드들도 그냥 나오면 심심한거 같아서 애니메이션 효과를 줘서 빙글빙글 돌면서 나타나거나 선택하면 흰색으로 변하면서 사라지게 처리하였고 이것역시 translate 대신에 scale, alpha, rotate 등을 이용하였습니다.
- 카드를 선택하면 카드들은 사라지고 오늘의 명언 내용이 나타납니다.
3. 메인 페이지
- 메인페이지는 상단에 커스텀된 Toolbar를 달았고 왼쪽에는 이전버튼, 오른쪽에는 메뉴버튼을 달았습니다.
=> 왼쪽에 <- 이렇게 생긴 이전버튼을 달았는데 기본적으로 아이콘 색이 흰색이라 배경에 뭍혀 안보여서 검은색으로 변경하였는데 이거 찾느라고 무지힘들었어요 ㅠㅠ
- 하단에는 BottomNavigationView를 사용해서 4개의 메뉴(Today's, 명언, 고사성어, 속담)를 만들었고 이부분은 뭐 워낙 간단한거라....
- 광고 삽입
광고는 애드몹을 사용했고 그림에는 안나오는데 BottomNavigationView 밑에 배너 광고, RecyclerView 중간중간에 네이티브 광고, 메뉴에 도움주기 메뉴를 클릭하면 나타나는 리워드 광고 이렇게 총 3개를 달았습니다. 광고 삽입하는건 도움말 참조하면 별로 어렵지 않았습니다.
4. 세계의 명언, 고사성어, 속담
- 화면은 주제별로 2열로 배치하였고 RecyclerView로 처리하였습니다.
=> 기기별로 해상도가 달라서 이미지 처리하는데 문제가 발생해서 스크린 너비를 구한 후 반으로 나누어 이미지의 너비를 주었고 adjustViewBounds속성을 true로 설정하여 가로세로 비율이 찌그러지지 않게 하였습니다.
- 본문 내용은 좌우로 스와이프 되도록하였고 우측하단에 카톡으로 본문 내용을 전송 할 수 있도록 하였습니다.
=> 스와이프는 ViewPager을 사용했고 카톡 전송은 처음에 kakao link를 쓰려고 했으나 kakao link는 텍스트를 200byte 밖에 전송을 할 수 없어서 그냥 Intent를 사용하여 startActivity로 보내도록 처리하였습니다.
5. 위젯 기능
- 위젯은 이번에 처음 써봤는데 제약사항이 너무 많아서 무척 힘들더라구요. 첫번째로 본문 내용이 길면 위 아래로 스크롤을 해야하는데 위젯에는 스크롤뷰나 텍스트뷰의 스크롤 기능을 쓸수가 없어서 무척 곤란하였습니다. 그래서 꼼수로 리스트뷰에 본문내용을 넣고 리스트뷰는 1개만 나오도록 처리하였습니다. (혹시 더 좋은 방법이 있으면 좀 알려주세요 ㅠㅠ)
암튼 이렇게 하니 위아래 스크롤도 되고 클릭 이벤트를 통해 앱을 실행 시킬수 있었습니다.
6. 기타
- 상단 메뉴에는 설정, 의견주기, 도움주기 등의 메뉴가 있습니다.
설정은 setPreferencesFromResource(R.xml.root_preferences, rootKey); 이걸 사용해서 별도의 액티비티 없이 레이어로만 처리하니 간단하게 만들수 있었습니다. (예전에 이걸 모를때는 레이어 디자인하고 액티비티에서 전부 코딩을 해줬었은데.... ㅠㅠ)
의견주기는 제 메일주소로 모바일에 설치된 메일어플을 통해 메일을 발송 할 수 있도록 하는 기능이고 이것도 Intent 기능으로 처리
도움주기는 전면광고를 테스트해볼려고 메뉴를 클릭하면 리워드 광고가 나타나도록 했습니다. 그냥 전면광고가 아니고 리워드 광고를 붙인이유는 전면광고는 광고가 끝났다고 이벤트가 떨어지지 않지만 리워드는 정상적으로 시청했는지 여부를 콜백함수를 통해 전달해줍니다.
간단하게 앱을 출시하는 과정을 설명하려고 있는데 앱 기능을 적다보니 너무 길어졌습니다.
혹시 앱이 궁금하신 분은 아래 링크로 들어가시면 다운받을 수 있으시니 한번 다운받아서 설치해보시고 리뷰 남겨주시면 감사하겠습니다. ^^;;;
https://play.google.com/store/apps/details?id=com.withu.todayssaying
개발 관련하여 몇몇가지 소소한 팁은 다음 글부터 진행하도록 하겠습니다. 감사합니다.
'안드로이드스튜디오 개발' 카테고리의 다른 글
[안드로이드 스튜디오] 오늘의 명언 - 인트로화면에 애니메이션 효과주기 (0) | 2021.05.07 |
---|---|
[안드로이드 스튜디오] 오늘의 명언 - 툴바 아이콘 색상바꾸기 (2) | 2021.05.07 |
[안드로이드 스튜디오] 로딩창 구현 (ProgressBar) (5) | 2020.06.30 |
[안드로이드 스튜디오] 단축키 모음 (Windows, Mac) (2) | 2020.06.29 |
[안드로이드 스튜디오] 네이버지도 #7 지도 화면 이동 (카메라 무빙) (0) | 2020.06.29 |
댓글