황진호

황진호

공부한걸 요약해서 기록해놓는 블로그

[Doit! 안드로이드 앱 프로그래밍] Mission3

1 분 소요

참고서적: Doit 안드로이드 앱 프로그래밍



두개의 이미지뷰에 이미지 번갈아 보여주기 예제입니다.


  1. 화면을 위와 아래 두 영역으로 나누고 그 영역에 각각 이미지뷰를 배치합니다.
  2. 각각의 이미지뷰는 스크롤이 생길 수 있도록 합니다.
  3. 상단의 이미지뷰에 하나의 이미지를 보이도록 합니다.
  4. 두개의 이미지뷰 사이에 버튼을 하나 만들고 그 버튼을 누르면 상단의 이미지가 하단으로 옮겨져 보이고 다시 누르면 상단으로 다시 옮겨지는 기능을 추가합니다.

이문제를 해결하는데 한시간이 소요됬다.. 금방금방 할것같앗지만 꽤나 디테일하게 접근하려다보니 잘안됬었다.

먼저, 스크롤뷰2개, 이미지뷰 2개와 버튼1개 가 필요하다. 부모컨테이너는 LinearLayout으로 구성했다.

Misson3-1

위의 그림처럼 LinearLayout 내에 스크롤뷰2개와 버튼1개를 구성한후에 각각의 스크롤뷰 안에 이미지뷰를 넣어줬다.

그림을 전환한다는 의미는 버튼클릭의 이벤트에따라 이미지뷰 각각에 하나는보이고, 하나는보이지 않게 구성해야 한다.

그렇게하기위해서 첫번째 시도로는, 이미지뷰1과 2에 각각 그림을 넣어준뒤 버튼클릭 이벤트에따라 SetVisibility 속성값에 visible과 invisible을 넣어서 했었다.

하지만 문제를 다시읽어보니, 상단의이미지가 하단으로 옮겨지고, 하단의이미지가 상단으로 옮겨져야 한다.

그렇게하기위해서는 이미지가 전환됨에따라 이미지가 사라져야 하는데 visibility 속성은 실제로는 있지만 보여질것인가 를 결정하는 속성이니.. 디테일하게 접근하기위해서는 없어져야되니까 setimagedrawable 메소드의 파라미터에 0을넣어 아에 이미지를 없앴다.

Misson3-2

에서 버튼을 누르는 동작을 하게되면

Misson3-3

로 바뀌게된다.

이렇게하고나니 또 생각이 드는 의문점이 .. 이문제에 정확한 의도는 모르겠으나, 그림을 전환시키면서 그 그림자체에 행해지는 동작과 모든상태를 그대로 옮길수는 없을까? 라는 생각이들었다.

스크롤뷰로 구성하라고 했기때문에, 스크롤을 내린 동작이라는게 있을텐데, 내가햇던방식으로 문제를풀게되면 스크롤을 내렷던건 상관없이 그저 그림만 없앳다가 넣엇다가 하는 방식밖에 되지않는다... 이 동작자체를 save해서 넘겨주는 방법은 없을까?...

너무 산으로 가는거같아 일단 보류... 다음에 구글링을해서든지 찾아봐야겠다.

깃허브주소

태그:

카테고리:

업데이트:

공유하기

Twitter Facebook LinkedIn

댓글남기기

참고

[Kotlin] Annotation 생성 및 활용 방법

6 분 소요

보통 어떤 기능을 만들기 위해 클래스나 인터페이스를 생성하고, 프로퍼티와 함수를 구현하고 이용합니다. 이렇게 생성된 클래스의 프로퍼티나 함수를 이용하여 캡슐화된 특정 기능을 호출 및 참조할 수 있습니다.

[Kotlin] Coroutine - 예외처리

17 분 소요

코루틴을 생성하기 위해서는 간단하게 Coroutine Builder 함수인 launch() 와 async() 를 이용하여 새로운 코루틴을 생성할 수 있습니다. 코루틴 빌더는 CoroutineScope 의 확장함수로써 기본적으로 상위 CoroutineScope 의 CoroutineC...

[Kotlin] 동시성 문제와 해결방법

10 분 소요

소프트웨어를 개발하는 데 있어서, 성능을 높이기 위해 가장 흔하게 사용할 수 있는 방법은 병렬로 실행하는 것 입니다. 병렬 실행은 하드웨어의 특성을 이용하여 성능을 높이는 가장 좋은 방법이지만, 병렬로 여러 프로세스나 스레드에서 같은 데이터를 접근하여 읽고 쓰는 과정이 수행될 때,...

[Compose] Compose Compiler

17 분 소요

최근들어 Compose 를 UI toolkit 으로 많이 사용하고 있습니다. 저 역시 마찬가지로 기존의 xml 기반의 뷰 작업들을 모두 Compose 로 migration 한 뒤로, 새로운 기능을 개발할 때 Compose 로 개발하고 있습니다. Compose 를 사용하고는 있지만...