2010-12-31 3 views
2

내 앱의 기본보기에 그래픽 캔버스가 표시됩니다. 메인 액티비티의 onCreate 메소드에는 registerForContextMenu(mapview); 명령이 포함되어 있으므로 사용자가이 뷰를 길게 누르면 컨텍스트 메뉴가 열리고 액티비티의 onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 메소드에 컨텐트가 정의됩니다.Android : 컨텍스트 메뉴를 여는 길게 누르기의 화면 좌표를 결정하는 방법

언론의 위치에 따라 메뉴의 내용을 변경하고 싶지만 해당 위치를 찾는 방법을 알 수 없습니다. onCreateContextMenu에 제공된 인수 중 아무 것도 해당 정보를 제공하지 않는 것 같습니다.

답변

3

까다로운 하나 난 두려워 어둠 속에서 그냥 찔러 ...

당신은 당신의 '기본보기'클래스가 무엇인지 언급하지 않지만이 경우는 '기본'안드로이드 한 후 도출하여 자신이 현재 사용하고있는 것을 확장하십시오. ,이 경우 -

는 클래스를 예를 들면, ...

클래스에서 또한

public int lastKnownX; // Might be float types - can't remember 
public int lastKnownY; 
, onTouch(View v, MotionEvent event)을 무시하고 그것이 ACTION_DOWN 이벤트가 있는지 확인하기 위해 MotionEvent을 확인 공공 X 및 Y 데이터 멤버를 부여 X 및 Y 좌표는 lastKnownXlastKnownY에 저장하십시오. - 다른 이벤트를 무시하고 모션 액션 (프로세스를 투명하게 만들기 위해)에 관계없이 항상 false를 반환하는지 확인하십시오.

필자의 이론은 긴 클릭/누르기가 해석 될 때 마지막으로 알려진 ACTION_DOWN 좌표가 긴 클릭이 시작된 위치의 좌표가되고 활동 (사용자가 공개로 정의한) , onCreateContextMenu() 메소드가이를 사용할 수 있습니다.

반면에 나는 벗어날 수 있지만 그게 문제에 접근하는 방법입니다. 한 번해볼 만하다. :-)

+0

감사합니다. 나는 당신이 제안한 것을했다. (하나의 수정으로 ... 이미 SimpleOnGestureListener를 확장 한 MyGestureDetector 클래스를 가지고 있는데, 이것은 언론의 시작 부분에 호출되는 onDown (MotionEvent e) 메서드를 포함하므로 코드 거기에서'e.getX()'와'e.getY()'의 좌표를 얻으려고합니다.) 이것은 잘 된 것 같습니다. – prepbgg

+0

@prepbgg : 좋습니다. 제 제안이 유용했기 때문에 좋습니다. – Squonk

관련 문제