2013-04-25 2 views
1

를 따라 이동하지 않습니다, 나는 새로운 이미지 뷰를 추가하고 같은, 리스너를 첨부 :핫스팟이 TranslationAnimation 런타임에서

image = new ImageView(someAppContext()); 
relativeLayout.addView(image, someLayoutParam); 
// add onTouch listener to the image view: 
image.setOnTouchListener(new ImageView.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
     makeToast("touched!"); 
     return false; // tried return true, makes no difference 
    } 
}); 

을 그 후, 나는 setFillAfter(true)로 TranslateAnimation을 사용하기 때문에 이미지 뷰 새로운 위치에 머무를 것입니다. 그러나 onTouch()는 ImageView의 OLD 위치를 터치하면 트리거되지만 이미지가 시각적으로 보이는 새 위치는 터치되지 않습니다. TouchView와 관련된 핫스팟을 ImageView와 함께 움직이게하려면 어떻게해야합니까? 나는 또한 invalidate()을 시도했지만, 도움이되지 않습니다.

+1

토스트 대신 Log.d (TAG, "터치") 만 기록하면 이미지와 텍스트 모두 터치 이벤트와 클릭 이벤트가 각각 발생합니다. –

+0

맞습니다. 둘 다 트리거됩니다. 나는 잘못된 문제에 집중했다. 그것은 애니메이션과 관련이있다. – user1032613

답변

1

애니메이션은 실제로 뷰를 움직이지 않습니다. 번역 애니메이션은 좌표에 오프셋을 추가합니다.

나는 최선의 해결 방법은 모든 애니메이션을 지우고 레이아웃 매개 변수를 업데이트하여 실제 ImageView를 애니메이션 대상으로 이동시키는 것입니다. 실제

이런 식으로
someLayoutParam.leftMargin = dest_x; 
    someLayoutParam.topMargin = dest_y; 
    yourImageView.clearAnimation(); // resets its position 
    yourRelativeLayout.updateViewLayout(yourImageView, someLayoutParam); 

, 이미지 뷰의 위치가 변경되지 않지만 :

당신은, 번역의 대상을 저장해야 dest_x, dest_y 말을하고 애니메이션 완료 후 수행 뷰가 이동되므로 터치 할 수있는 영역도 이동합니다.

관련 문제