CoordinatorLayout과 Behavior의 관계



머트리얼 디자인 가이드 라인중 스크롤시 다양한 반응을 위한 테크닉인 Behavior라는 개념이 도입 되었습니다. 기본적으로 액션바를 확장하여 스크롤시 액션바를 줄여들게 하도록 AppBarLayout의 ScrollingViewBehavior와 스크롤시 하단으로 숨기게 하기위해 BottomSheetBehavior를 서포트라이브러리에서 제공하고 있습니다.

  • android.support.design.widget.AppBarLayout$ScrollingViewBehavior
  • android.support.design.widget.BottomSheetBehavior

Behavior를 사용하기 위해서는 CoordinatorLayout을 통해서 사용되는데, CoordinatorLayout은 자식뷰의 스크롤의 변화 상태를 다른 자식뷰들에게 전달 해주는 역할을 합니다. 좀더 쉽게 말해 NestedScrollView나 RecyclerView등에 스크롤의 상태를 판단하여 정의된 반응을 하기위한 View에 Behavior를 등록하면 됩니다.

이해를 돕기위해 안드로이드 서포트 라이브러리에서 제공해주는 Behavior를 한번 보겠습니다. NestedScrollView에 layout_behavior에 AppBarLayout$ScrollingViewBehavior가 정의가 되어있습니다. NestedScrollView의 반응에 따라 AppBarLayout이 반응됩니다.

CoordinatorLayout는 NestedScrollView가 스크롤시 layout_behavior에 정의된 레이아웃으로 스크롤 정보를 전달 하는 역할을 합니다. 그럼 AppBarLayout의 ScrollingViewBehavior가 정보를 받아서 AppBarLayout 자신을 변형하도록 하는 구조입니다.

CoordinatorLayout이 스크롤되는 것은 Behavior에 구현된 NestedScrollingParent를 통해 전달 됩니다. 즉, CoordinatorLayout는 NestedScrollingParent가 구현되어 있으며 스크롤 되는 View들은 NestedScrollingChild가 구현되어 있어야 Behavior가 전달 됩니다. 그렇기 때문에 기존의 ScrollView나 ListView는 NestedScrollingChild가 구현되어 있지 않아 Behavior를 통해 스크롤 정보전달이 되지 않습니다.

이렇게 CoordinatorLayout의 역할과 Behavior의 관계를 알고 있다면 Behavior를 커스텀해서 구현하는데 전혀 문제 없을 것입니다.




구글 Chromecast 에뮬레이터 만들기 For Mac

구글 크롬캐스트가 출시 되었지만 아직 국내에서 구입하기가 불가능하다.  크롬캐스트를 HDMI포트로 와이파이로 수신된 영상이나 음성을 출력해주는 기기이다. 얼마전 포스팅을 통해 크롬캐스트에 대한 작동법을 설명했다. 

아직 국내에 출시 되지 않아 사용해보거나 SDK를 통해 앱을 개발/테스트 할 수 없다. 하지만 에뮬레이터를 만들어 실제 기기에 크롬캐스트가 연결 된것 처럼 환경을 구성 할 수 있다.

Github를 통해 공개된 Leapcast를 이용하면된다. 파이썬을 이용해서 개발 되었으며, 작동 원리는 간단하게 말하자면 Leapcast는 서버를 실행해서 기기에서 request가 오면  크롬브라우저에 기본적으로 내장되어 있는 크롬캐스트를 호출 해주게되어 영상이나 음성이 나오게 된다.

준비사항

1. MAC OSX 10.8 이상   MAC OSX 10.7.5 에도 정상 작동 확인 

2. Chrome 브라우저 필수 설치

3. Python  2.7.x 및 기타 모듈

 

 

설치/환경 세팅 방법 (2013. 08. 05 수정)

 

 MAC OS X 10.8이상 일 경우 Python의 버그로 인해 실행안되니 터미널에서 다음과 같은 조취를 취한다.

$>sudo mkdir -p /usr/include/python2.7

$>sudo ln -s /System/Library/Frameworks/Python.framework/Versions/Current/in

 

– 앱을 이용한 방법

일단 아래 수동방법을 해보기전, 아래과정을 모두 자동으로 해주는 앱이 있다. 여기서 다운로드를 받는다.

다운받은 후 압축을 풀고 실행을 하면 모든 구성이 완료된 상태이다. 간혹 특정 Mac 에서는 환경설정 문제로 에러나는 경우가 있는데, 에러나면 수동방법을 사용하면된다.

앱이 실행되면 반응은 없지만, 유튜브앱을 실행하면 크롬캐스트 아이콘이 활성화 되어 있어 바로 캐스트가 가능하게된다.

 

– Python으로 수동으로 서버띄우는 방법

  1. Python이 설치 되어 있지 않으면 아래사이트를 통해 다운을 받고 설치한다. 버전은 2.7.x버전을 설치 해야한다.

http://www.python.org/getit/

  1. Github의 Leapcast에서 설치파일을 받은후 아래와 같이 설치를 한다. 

$> python setup.py develop

크롬캐스트 위치 기본적으로 가 Mac기반이 아닌 Unix기반으로 되어 있기 때문에 문제가 생길수 있어, 수정버전으로 재 업로드 했으니 여기서 받으시면 leapcast실행시 –chrome 위치를 적어주지 않아도 되고 설치 할 필요가 없다. 바로 3번으로 이동!

cfile2.uf.2609FC3651FFB5FB2FE427.zip

설치중 module이 없으면 에러가 나는데, 해당 모듈을 일일이 찾아서 설치하기가 힘들다. 하지만 easy-install을 이용하면 쉽게 설치 할 수있다.

예를 들어 setup module이 없다면 

$> python easy-install setup 를 하게되면 설치가 가능 하다.

$> python easy-install <모듈명> 

  1. Leapcast install이 끝나면 /leapcast 디렉토리에 실행에 필요한 파일이 생성되었을 것이며, leapcast를 실행 하면된다.

$>leapcast --name Chromecast --chrome 크롬이 설치된 위치

여러가지 옵션이 있는데 chrome 설치위치는 필수이다. (위에서 수정버전을 받았다면 생략 가능) 크롬의 구글캐스트를 이용하여 재생하기때문이다.

  1. 여기까지 아무 문제가 없다면 이제 준비상태가 되었다. 같은 Wi-Fi 안드로이드or아이폰의 YouTube앱을 실행 하게 되면 아래와 같이 아이콘이 활성화 되어 cast를 할 수 있다.

  • Android YouTube App

  • Emulator

현재 Google MusicPlay, YouTube, Netflix 앱에서만 크롬캐스트가 지원된다. 아주 쉬운 SDK가 제공되기 때문에 앞으로 크롬캐스트를 사용하는 앱이 점차 늘어날 것이다. 아직 국내에서는 정식 출시가되지 않은 상황에서 이렇게 에뮬레이터를 통해서도 개발이 가능하니 재미있는 앱들이 만들어지면 좋겠다. 

구글 Chromecast DIAL프로토콜을 이용한 직접 재생방법

얼마전 구글에서 크롬캐스트가 발표 되었다.  

크롬캐스트는 HDMI포트에 꽂아 오디오나 비디오를 와이파이를 통해 수신해 기기에서 재생해줍니다.  

개발/작동 방식은 구글캐스트의 SDK를 사용하여 크롬캐스트에 스트리밍할 URL을 보내주면 크롬캐스트가 스트리밍 재생하는 방식입니다.

구글캐스트의  SDK를 이용하면 약간의 제약이 걸리게 됩니다. 예를 들어 로컬에 있는 파일은 재생할수 없으며, 등록된 안된 앱은 재생이 안되는등 제약이 걸리게 됩니다. 하지만 SDK를 안쓰게 되면 그만의 문제점이 있을수 있습니다.

크롬캐스트에 로컬재생과 스트리밍 URL을 이용하여 바로 재생되게 할 방법은 크롬캐스트가 사용하는 DIAL프로토콜을 직접 제어하면 됩니다. 제어는 HTTP및 웹소켓을 통해 수행하면 됩니다. 이렇게 직접 제어를 하게되면 구글캐스트의 SDK를 클라우드기반의 솔루션을 사용하지 않고 앱을 개발 할수 있습니다.

실제로 YouTube에 SDK를 이용하지 않고 크롬캐스트롤 영상을 재생하는 앱을만들었다는 동영상이 게시되어있습니다.

또한 Github에 관련된 코드도 공개 했습니다.

이것을 이용하면 로컬파일재생은 물론 현재 보고 있는 안드로이드 화면을 크롬캐스트로 보낼수도 있는 앱을 개발이 가능할 것 같습니다.

Omnia 7



Windows Phone 7을 탑재한 삼성에서 옴니아 7을 출시 하였습니다. 아이폰이나 안드로이드와 다른 UI가 인상 적이네요..
한번 사용 해보고 싶네요.. 물론 앱도 개발해보고 싶고요..