안녕하세요?


지난번 포스팅에서는 스크롤뷰를 이용해서 이미지를 보여주는 작업을 하였습니다만, 이미지가 뜨지 않는 문제점이 나왔고 이를 해결하지 못했습니다. 이번 포스팅에서는 의외로 해법이 가까이 있었는데, 그걸 몰라서 지금까지 헤메었다는 것을 포스팅 하고자 합니다.



백방으로 다녀서 일단 제대로 API에 맞춰서 바꾼 코드를 위 스크린샷에서 빨간색 밑줄로 표시를 해 두었습니다. 기존의 코드는 다음과 같았습니다.


getResource().getDrawable(R.drawable.그림파일 이름);


이 코드를 API21이상부터는 다음과 같이 사용이 가능하다고 합니다.


ContextCompat.getDrawable(getApplicationContext(), R.drawable.그림파일 이름);


문제는 이렇게 자바코드를 고치고 나서도 여전히 USB로 연결된 스마트폰상에서는 아무런 이미지도 뜨지 않는 다는 문제가 여전했습니다. 그러던 중에 아래와 같이 design탭에서 다음과 같은 실수가 있다는 것을 들어서 한번 지정을 해 보도록 하였습니다.



네이버 안드로이드 개발자 카페에서 말해준 것과 같이, 리니어 레이아웃에서 orientation속성을 전혀 지정하지 않았습니다. 그래서 위 스크린샷에서 보이는 것 처럼 리니어 레이아웃의 orientation속성에다가 수직방향을 뜻하는 vertical을 지정해 놓도록 했습니다.



이후에 USB 케이블로 이어진 스마트폰상에서 앱을 실행시켜 본 결과, 제대로 된 풍경사진이 나오는 것을 볼 수 있습니다. 거기다가 위 스크린샷에서 우측은 버튼을 누르고 나서 이미지가 교체된 사진입니다. 여기서 비록 성공하기는 했지만, 그래도 남은 의문이 하나 있습니다.


기존의 getResource().getDrawable(int ID)라는 메서드가 중지되어서 이번 포스팅의 제일 첫 부분에 나온 것 처럼 변경시킨 코드나, 기존의 코드나 제대로 그림파일이 나온다는 것입니다. 이는 어떻게 성공된 것인지는 여기까지는 제가 알기 어렵습니다. 다만 이번 실습으로 또 깨달은 것은 두가지 있었습니다.


1번 리니어 레이아웃은 반드시 orientation을 지정해야 한다.

2번 getResource().getDrawable(R.drawable.그림파일 이름); 

                혹은 

ContextCompat.getDrawable(getApplicationContext(), R.drawable.그림파일 이름); 

으로 사용이 가능하다.


이것으로 어느정도 스크롤뷰와 상대적으로 큰 그림 이미지파일을 스마트폰 앱 상에서 띄울 수 있게 되었습니다.


+ Recent posts