본문 바로가기

ANDROID/UI - UX

[안드로이드] 레이아웃에 동적으로 이미지뷰 추가하기 (ScalableLayout을 활용한 경우)

이미 명시된 이미지뷰의 위치를 애니메이트 하거나 이동시키는 건 어느정도 익숙했지만


동적으로 xml파일로 명시되지 않은 이미지뷰를 원하는 크기와 위치에 추가하는 건 해보지 않은 일이었다.


여러 자료들을 참조했고, 다음과 같은 큰 단계들을 따라 목표를 달성할 수 있었다.



1. 추가하고자 하는 속성의 뷰를 선언하고, 속성을 지정한다.


setLayoutParams에서는 뷰의 필수값인 layout_width, layout_height을 아래와 같이 지정해주게 된다.


ScalableLayout이 아닌 기타 width, height 값을 정해 만들고자 한다면 WRAP_CONTENT로 넘겨주고 있는 부분을 조정해주면 된다.


( 이 경우에는 다음 페이지를 참조할 것 : https://stackoverflow.com/questions/35354032/how-to-set-layout-params-to-units-dp-android


ImageView iv = new ImageView(this);
iv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
iv.setImageResource(R.drawable.red_dot_icon);


2. 뷰를 추가하고자 하는 레이아웃의 아이디를 지정하고, 이를 onCreate에서 setContentView 이후 위치에서 findViewById로 참조한다.



3. 마지막으로 원하는 시점에 참조한 레이아웃에 addView로 뷰를 추가한다.


scalableLayout.addView(iv , 0f, 0f, 3f,  3f);



addView에서는 파라미터를 (뷰, left, top, width, height)으로 넘겨주게 되는데, 이는 scalableLayout을 사용하면서 필요한 값들로


다른 속성의 레이아웃을 이용할때는 다른 식으로 추가를 해줘야할 수도 있다.


위에서 left와 top 값을 0으로 지정한 이유는 향후 유동적으로 위치를 지정해주기 위함이다.



결과는 성공적이었고, 레이아웃은 기본적으로 모두 뷰의 속성을 가지고 있으므로, 기호에 따라 원하는 레이아웃에 붙여


추가된 여러개의 뷰를 루트 뷰의 Visibility를 조정해주는 방식등으로 일괄 제어도 가능하지 않을까 하는 생각이 든다 :)



< 참조 >


https://www.androidpub.com/2081417


http://androiddeveloper.tistory.com/94


https://github.com/ssomai/ScalableLayout