스팀 앱 개발기 #99 - 포스트의 이미지들을 보여 줄 뷰 페이저 화면 개발
시작하며...
간만에 새 화면 개발을 재개합니다. 지난 포스트에서 언급한 '포스트의 이미지들을 보여 줄 뷰 페이저 화면'입니다.
스크린샷
위 그림과 같이 태그 화면에서 포스트의 썸네일 이미지를 클릭하면, 포스트의 이미지들을 보여줄 뷰 페이저 화면으로 이동합니다. 이 곳에서 손가락으로 왼쪽 또는 오른쪽으로 스와이프하여 다음 또는 이전 이미지를 볼 수 있습니다.
개략적인 구현 방법
bridge.get_ranked_posts API로부터 받을 포스트 리스트에서요. 각 포스트는 "json_metadata"라는 메타데이터가 있구요. 거기에 이미지 리스트(키 값은 "image")가 있습니다. 시작할 뷰 페이저 화면에 이 리스트를 넘겨주면 됩니다.
dorian-steem-domain 모듈 작업 내용
- PostItem 클래스
- imageURLs 필드 추가 (뷰페이저 화면에 전달할 이미지 리스트)
dorian-steem-data 모듈 작업 내용
- PostItemDTO 클래스
- toPostItem() 메소드: PostItem 객체 생성시 이미지 URL 리스트를 imageURLs 필드에 지정
dorian-steem-ui 모듈 작업 내용
- PostImagePagerState 클래스 추가
- 뷰페이저 화면의 상태 데이터 정의
- 이미지 URL 리스트 보유
- PostImagePagerAdapter 클래스 추가
- 포스트 이미지 뷰페이저 뷰와 연결될 어댑터
- 이미지 URL 리스트로부터 각 이미지 로딩
- PostImagePagerViewModel 클래스 추가
- 포스트 이미지 리스트를 담을 MutableStateFlow 정의
- 이미지 URL 리스트 업데이트할 updateImageURLs 메소드 정의
- PostImagePagerActivity 클래스 추가
- 포스트 이미지 뷰페이저 화면 담당
- PostImagePagerViewModel 객체로부터 이미지 URL 리스트 수집 및 처리
다음 작업은...
포스트의 내용을 보여 줄 화면을 개발해볼까 합니다.
마치며...
이 뷰페이저 기능은 웨어인 안드로이드 앱에 이미 적용된 기능입니다. 재작년엔가 이 기능을 처음 보고 어떻게 구현했을까 참 궁금했었죠. bridge.get_ranked_posts API의 응답 자료를 분석한 후, 이게 어려운 작업은 아니라는 것을 파악할 수 있었습니다.
다음에 개발할 포스트 내용 화면은 좀 더 어려운 개발이 될 것입니다. 왜냐면요. 스팀잇 사이트에서 구현된 유튜브 화면 보여주기는 기존 안드로이드에서 공유된 오픈 소스 마크다운 뷰에서는 구현이 안 되어 있기 때문입니다. 스팀잇에서는 단순한 이미지 링크도 이미지로 변환하여 보여주는데요. 이것도 오픈 소스에서는 구현이 안 되어 있습니다. 이러한 기능들까지 개발하려면, 공수가 좀 들 것으로 예상됩니다. 일단 기존 오픈 소스 마크다운 뷰를 먼저 활용해볼 예정입니다.
지난 스팀 앱 개발기
- #98 - 다음에 개발할 기능
- #97 - 보팅 리스트 화면, 프로필 이미지 화면의 데이터 바인딩 제거, 리팩토링
- #96 - RxJava를 코루틴으로 대체 후 테스트 코드 수정
- #95 - 지갑 화면 구조 개선
- #94 - 태그 화면 구조 개선
- #93 - 보팅 리스트 화면에서 프로필 이미지 클릭 기능 구현
- #92 - 태그 화면이 포스트 리스트 로딩 중에 다른 탭 클릭하면 앱이 죽는 문제 (2) 해결 방법
- #91 - 태그 화면이 포스트 리스트 로딩 중에 다른 탭 클릭하면 앱이 죽는 문제 (1) 오류 내용, 원인
- #90 - 태그 화면에서 이미지가 뭉개지는 문제
- #89 - 태그 화면에서 다운보팅 카운트 클릭하면 앱이 죽는 문제
- #88 - 보팅 리스트 화면에 스팀잇 계정 검색 기능 추가
- #87 - 보팅 리스트 화면 개선: (1) 다운보팅도 보여주기 (2) 계정 썸네일 로딩 속도 개선
- #86 - 보팅 리스트 관련 데이터 클래스 보완
- #85 - 보팅 리스트 화면 구현
- #84 - 보팅 리스트 화면 구현을 위한 데이터 클래스 추가/변경
- #83 - 포스트의 보팅 리스트에서 각 보팅의 가치 계산 방법 정리
- #82 - 포스트의 보팅 리스트에서 각 보팅의 가치는 어떻게 계산해야 하나?
- #81 - 보팅 리스트 화면 개발 예정
- #80 - 버그 수정: 태그 화면 시작시 bridge.get_ranked_posts API가 여러 번 실행되는 문제
- #79 - 태그 화면에 새로 고침 기능 추가
- #78 - 태그 화면에서 포스트들의 디폴트 썸네일 변경
- #77 - 태그 화면에서 썸네일 없는 포스트 항목에 엉뚱한 썸네일이 보이는 오류
- #76 - 태그 검색시 앱이 죽는 버그 수정
- #75 - 태그 화면의 포스트 항목에 태그/커뮤니티 표시
- #74 - 태그 화면에서 포스트 리스트 추가 로딩시 깜빡임 문제 해결
- #73 - 태그 화면의 포스트 리스트에 무한 스크롤 적용
- #72 - 태그 화면의 포스트 리스트에서 항목들 사이 분리선 보이기
- #71 - 태그 화면에서 포스트 항목들의 썸네일 로딩
- #70 - 태그 화면 1차 구현
- #69 - 태그 화면에 데이터 바인딩 적용
- #68 - 태그 화면(TagsFragment) 구성
- #67 - TagsViewModel 클래스에 포스트 리스트 구하는 메소드 그리고 라이브 데이터 추가
- #66 - bridge.get_ranked_posts API 연동 구현: ReadRankedPostsUseCase 클래스 추가
- #65 - bridge.get_ranked_posts API 연동 구현: SteemRepository 인터페이스, SteemRepositoryImpl 클래스 수정
- #64 - bridge.get_ranked_posts API 연동 구현: SteemService 인터페이스에 메소드 추가
- #63 - bridge.get_ranked_posts API 관련 데이터 클래스 추가 수정
- #62 - bridge.get_ranked_posts API의 응답 자료를 맡을 데이터 클래스 수정
- #61 - layout_post_item.xml 수정 후 예상치 못한 빌드 오류
- #60 - bridge.get_ranked_posts API의 응답 자료를 맡을 데이터 클래스 정의
- #59 - 태그별 포스트 리스트를 구하기 위한 bridge.get_ranked_posts API
- #58 - 포스트 리스트를 구성할 항목의 레이아웃 (3) 데이터 클래스 정의 및 데이터 바인딩 적용
- #57 - 포스트 리스트를 구성할 항목의 레이아웃 (2)
- #56 - 포스트 리스트를 구성할 항목의 레이아웃
- #55 - .gitignore 파일 작성
- #54 - RxJava 관련 메모리 누수 방지 코드 작성
- #53 - 버그 수정: 인터넷 미연결시 API 실행하면 앱 강제 종료
- #52 - 인터넷 미연결시 API 실행하면 어떻게 될까?
- #51 - 파워다운 끝났으나 SP to power down 값이 0이 아닌 버그
- #1 ~ #50
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
이햐...ㅎㅎ
개발자분들도 다른 결과물들을 뜯어보고 공부하면서
새로운 개발을 하시는 거군요 'ㅁ';; ㅎㅎㅎ
어렵다 어려웡ㅋㅋㅋ
묵묵히, 멋있으십니다.ㅎㅎ 퐈이팅!!
수고가 많으십니다.