2011-07-27 5 views
1

여러 개의 ImageView가 포함 된 FrameLayout이 있습니다. 주요 활동에서 손가락으로 내 FrameLayout 및 이미지를 드래그 (드래그)하기 위해 터치 이벤트를 기록합니다.Android : 캔버스 뒤의 클릭/터치 이벤트가 작동하지 않습니다.

이렇게하려면 activity touch 이벤트 처리기에서 invalidate()에 의해 호출 된 framelayout의 onDraw 내부에서 canvas.translate (x, y)를 호출합니다.

번역 후에는 ImageView를 클릭 할 수 없다는 점을 제외하면 모든 것이 매력처럼 작동합니다. 사실, 각 이미지의 클릭 리스너는 번역되기 전에 원래 위치에 있습니다.

번역 후 각 이미지의 레이아웃을 수동으로 업데이트해야한다는 것을 읽었지만 어떻게해야합니까? 변환 값으로 여백을 변경하면 이미지가 두 번 더 진행됩니다.

정말 도움이 될 것입니다.

건배.

다음은 onDraw() 메서드에서 캔버스를 변환하는 frameLayout입니다 (ImageView는 내 주 활동에서 해당 FrameLayout에 추가됩니다).

public class TopView extends FrameLayout { 

public float mPosX = 0; 
public float mPosY = 0; 

public TopView(Context context) 
{ 
    super(context); 
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(1920, 3200, Gravity.CENTER); 
    this.setLayoutParams(lp); 
    setWillNotDraw(false); 
} 

@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.translate(this.mPosX, this.mPosY); 

} 

} 

답변

1

생성자에서 setPadding (this.mPosX, this.mPosY, 0,0)을 사용할 수 있습니다. 그것은 작동해야합니다.

관련 문제