제가 하려고하는 것은 세개의 레이아웃이 있고 width는 fill이며 height는 비율로 따지면 50/25/25 (%) 입니다.
간단한 그림으로 설명드리면
--------- -------- -------
-------- -------
--------- -------
--------- -------
--------- ------- --------
첫번째 그림처럼 되어있는 상태구요
각 레이아웃을 클릭하면 나머지 두 그림과 같이 되는건데요
저렇게 하나의 레이아웃이 커지면 다른하나는 작아지게 끔 애니메이션을 넣고 싶습니다.
어떤 방법이 적절한지 말씀 부탁드려요
애니메이션이 아니더라도 크기조절 되는게 보이면 아무거나 상관없습니다.
답변 부탁드려요~
xml로 설명드릴게요
<LinearLayout width="fill", height="fill" weight="1" />
<LinearLayout width="fill", height="fill" weight="2" />
<LinearLayout width="fill", height="fill" weight="2" />
첫번째 그림은 이런 상태가 되구요
레이아웃을 클릭하면 해당 레이아웃이 weight값이 1이 되고 나머지는 2가 되는 형식입니다.
설명이 제대로 됐는지 모르겠네요
전체화면이 100%라고하면
첫번째 뷰는 50%를 차지하게되고 나머지는 25%식 차지한 상태입니다..
그상태에서 두번째 뷰를 클릭하면 50%를 차지하게 되며 나머지 첫번째와 세번째는 25%를 차지하게 하려는 기능입니다
클릭될때
위 세개의 레이아웃을 가지고있는 부모뷰에서 반복문을 돌려 자식뷰를 찾으면서
LinearLayout.LayoutParams객체를 가져와서 LinearLayout.LayoutParams.weight 가 1인 자식뷰를 찾아서
클릭이 일어난뷰와 함께 애니메이션을 주면 되겠네요.
소스로 보자면 이런 느낌이 되겠군요.
public void onClick(View v){
LinearLayout.LayoutParams clickViewParams = (LinearLayout.LayoutParams)v.getLayoutParams();
clickViewParams .weight = 1.0f;
v.setLayoutParams(clickViewParams);
LinearLayout tagetView;
for(int i = 0; i < parent.getChildCount(); i++){
LinearLayout child = (LinearLayout)parent.getChildAt(i);
LinearLayout.LayoutParams childParams = (LinearLayout.LayoutParams)child.getLayoutParams();
if(v != child && childParams.weight == 1.0f){
childParams.weight = 2.0f;
child.setLayoutParams(childParams);
targetView = child;
}
}
v.startAnimation(커지는스케일애니메이션);
targetView.startAnimation(작아지는스케일애니메이션);
}
커지는 애니메이션
<scale
android:duration="1500"
android:fromXScale="1.0"
android:fromYScale="0.5"
android:pivotX="100%p"
android:pivotY="0%p"
android:toXScale="1.0"
android:toYScale="1.0" />
작아지는 애니메이션
<scale
android:duration="1500"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="100%p"
android:pivotY="0%p"
android:toXScale="1.0"
android:toYScale="0.5" />
스케일값을 커질때 1.0 -> 2.0 , 작아질때 2.0 ->1.0 으로 하면 변화가 없기에 저렇게 잡았습니다.
아~ 원하시는게 어떤것인지 알겟네요.
그렇다면 애니메이션을 나눠서 적용시켜야 할것같네요.
만약에 커지는 애니메이션이라면
기존에 시작 스케일이 1.0f 고 최종스케일이 2.0f 그리고 지속시간이 2초라고 한다면
애니메이션을 열개정도로 나눠서
1번 애니메이션에 시작스케일 1.0f 최종 스케일 1.1f 지속시간 0.2초로 이런식으로 열개를 만들고 setAnimationListener로
애니메이션 리스너를 설정하고 애니메이션이 종료될때 호출되는 onAnimationEnd 에서 1번애니메이션이 끝날때
2번 애니메이션을 시작하고 2번 애니메이션이 끝날때 3번 애니메이션을 시작하고 이런식으로 이어가면 될것같습니다.
그림이 알아보기 힘들게 되어있네요.
어떤상태인지 알기가 어려움