android layout을 하고 있는데 걸리는곳이 있어 질문드립니다.
Before사진을 보시면 평상 시에는 파란색으로 덮혀 있다가
터치를 하면 animation효과를 사용하여 위로 화면이 올라갑니다 그리고 seekbar를 사용할 수 있게 하려는 구조 입니다.
그런데 파란색 막대기가 올라간 후에도 터치를 하면 파란색 이미지가 클릭이 되는것으로 인식됩니다.
뒤에 있는 seekbar가 아니구여
이 문제를 해결 하려고 막 하고 있는데 안되네여
어떤게 문제가 있는걸까요??
layout배치는 파란색이 가장 아래 있어 가장 위에 있게 배치 해 놨습니다.
실제로 파란색을 클릭한후 setY(-400)을 하면 아래 seekbar만 클릭 됩니다
제 생각에는 좌표는 그대로이고 image만 움직여서 그런거 같은데 해결 방안 있으신 분을 공유좀 부탁드립니다.
Before

After
설명이 하나도 이해가 안됩니다...
1.터치를 하면 animation효과를 사용하여 위로 화면이 올라갑니다
>>이건 시크바가 위로 올라온다는 말씀인가요... 위로 화면이 올라간다는게 무슨말이죠? 화면 자체가 위로 올라가나요?
2.그런데 파란색 막대기가 올라간 후에도 터치를 하면 파란색 이미지가 클릭이 되는것으로 인식됩니다.
>>평상시에 파란색으로 덮혀 있다가 터치히면 시크바 컨테이너가 위로 올라온다는것 아니었나요? 근데 파란색 막대기는 어디로 올라간다는거죠...
제가 이해한것....
평소에는 파란색 이미지가 덮개처럼 덮혀 있다가 터치 하는순간 -y 방향으로 translate animation되어서 파란색 이미지 아래있던 seekbar를 사용할 수 있게 한다는 말씀인가요?
파란색 이미지에 애니매이션을 거신거라면
애니매이션 객체에
setFillAfter(true) 옵션으로 이동뒤에 그 상태를 유지하도록 옵션을 주어 보시구요...
안되면
setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {}
public void onAnimationRepeat(Animation animation) {}
public void onAnimationEnd(Animation animation) {
//이곳에서 파란색 이미지 뷰의 visibility를 변경
}
})
으로 애니매이션이 종료되었을때 해당 파란색 뷰의 visibility속성을 바꿔보세용
예전에 저도 같은 문제로 고생을 했습니다.
안드로이드에서 애니메이션 이후에 이벤트 영역이 그대로 유지가 되더군요.
그래서 애니메이션 완료 이벤트가 오면 파란부분 마진을 수정하는 방법으로 해결을 보았습니다.
참고로... topmargin을 바꾸는 간단한 예제 올립니다.
-------------------------------------------------
부모가 relative 인 linearlayout의 마진값 변경 방법
-------------------------------------------------
해당 레이아웃의 파라미터 값을 변경하겠다고, 해당 레이아웃의 LayoutParams의 객체를 만드는 것이 아니라, 그 상위에 있는 ViewGroup의 레이아웃의 객체를 만들어 내는 것이 필요하겠습니다. <RelativeLayout> <LinearLayout id="LinearLayout1" > </LinearLayout> </RelativeLayout> LinearLayout layout1 = (LinearLayout) findViewById(R.id.LinearLayout1); /*변경하고 싶은 레이아웃의 파라미터 값을 가져 옴*/ RelativeLayout.LayoutParams plControl = (RelativeLayout.LayoutParams) layout1.getLayoutParams(); /*해당 margin값 변경*/ plControl.topMargin = -100; /*변경된 값의 파라미터를 해당 레이아웃 파라미터 값에 셋팅*/ layout1.setLayoutParams(plControl);




파란색을 터치하면 animation으로 위로 올리는것 같습니다. 그럼 뒤에 숨어있는 시크바들이 보이는것 같은데요.
혹 animation후 setfillafter(true)를 사용하여 파란색을 위로 올라가게 한 상태를 유지하시나요?
정확하지는 않지만 제가 알기론 animation에 의한 이동은 보여지기만 그렇게 보여질뿐 실제로는 원래 위치에 그대로 있는 거로 알고 있습니다.
따라서 위에 말씀하신대로 파란색막대기가 올라간 뒤에도 파란색에 클릭이벤트가 들어가는것 입니다.
파란색막대기가 올라간후 시크바에 이벤트가 들어가게 하시려면 파란색 막대기가 올라가는 애니메이션이 완료되는 시점에
파란색막대기의 위치를 위에서 하신것 처럼 setY(-400) 이렇게 하시면 실제로 파란색막대기가 위로 올라가져서 시크바에 이벤트가
들어가게 되지 않을까 합니다.
setY등 정확한 좌표가 힘들다면 애니메이션이 완료 되는 시점에 시크바 layout을 파란색막대기 위에 나오게 해주는 것도 방법이 아닐까 싶네요.
혹 잘못된 정보라면 댓글 부탁드립니다.