마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

테이블 레이아웃 위에 그리기..도와주세요..

0 추천

우선 아래처럼 테이블레이아웃으로 구성되어있는 화면에

제가 원하는 지역만 박스를 치고 싶었는데.. 테두리 설정하기가 힘들어서

해당 레이아웃 위에 직접 그리려고 합니다.

 

RelativeLayout으로 감싸서 진행할예정이고..레이아웃 겹치는건 나중에 하고

먼저.각각 셀의 좌표를 구한뒤에 원하는 좌표까지 선을 긋는 형식으로 하려는데.. 좌표값 구하는데서 자꾸 헤매고 있네요..

좌표값 구하는 메소드가 여러개던데..확인차 로그를 남겼는데 자꾸 0으로만

리턴이 됩니다..무엇이 문제일까요?

<테스트 소스>

RelativeLayout root = (RelativeLayout) findViewById(R.id.root);

        TextView textView4 = (TextView) findViewById(R.id.text4);

        float x;
        float y;

        x = textView4.getX();
        y = textView4.getY();

        int scrloc[] = new int[2];
        textView4.getLocationOnScreen(scrloc);

        int wndloc[] = new int[2];
        textView4.getLocationInWindow(wndloc);

        int scrloc2[] = new int[2];
        root.getLocationOnScreen(scrloc2);

        int wndloc2[] = new int[2];
        root.getLocationInWindow(wndloc2);

        Log.d("그리기 테스트", "getX() : " +  x + " getY() : " + y);

        Log.d("그리기 테스트", "스크린 X : " +  scrloc[0] + " 스크린 Y : " + scrloc[1]);

        Log.d("그리기 테스트", "윈도우 X : " +  wndloc[0] + " 윈도우 Y : " + wndloc[1]);
        Log.d("그리기 테스트", "레이아웃 X : " +  root.getX() + " 레이아웃 Y : " + root.getY());

        Log.d("그리기 테스트", "레이아웃 스크린 X : " +  scrloc2[0] + " 레이아웃 스크린 Y : " + scrloc2[1]);
        Log.d("그리기 테스트", "레이아웃 윈도우 X : " +  wndloc2[0] + " 레이아웃 윈도우 Y : " + wndloc2[1]);

04-29 15:58:54.459    2572-2572/unfailing35.test D/그리기 테스트? getX() : 0.0 getY() : 0.0
04-29 15:58:54.459    2572-2572/unfailing35.test D/그리기 테스트? 스크린 X : 0 스크린 Y : 0
04-29 15:58:54.459    2572-2572/unfailing35.test D/그리기 테스트? 윈도우 X : 0 윈도우 Y : 0
04-29 15:58:54.459    2572-2572/unfailing35.test D/그리기 테스트? 레이아웃 X : 0.0 레이아웃 Y : 0.0
04-29 15:58:54.459    2572-2572/unfailing35.test D/그리기 테스트? 레이아웃 스크린 X : 0 레이아웃 스크린 Y : 0
04-29 15:58:54.459    2572-2572/unfailing35.test D/그리기 테스트? 레이아웃 윈도우 X : 0 레이아웃 윈도우 Y : 0                                                                                                                                                                                                                                                                                                                                                                                               

 

치솟음 (3,710 포인트) 님이 2015년 4월 29일 질문

1개의 답변

0 추천
 
채택된 답변

onCreate에서 getLocationXXX 를 하게되면 아직 뷰가 다 생성되어 자리잡기 전의 상태이기 때문에 0이 리턴됩니다.

아래와 같이 onWindowFocusChanged를 오버라이드 그 안쪽에서 테스트 해보시기 바랍니다.

@Override
public void onWindowFocusChanged (boolean hasFocus) {
       final int[] x=new int[2];
        b.getLocationOnScreen(x);
}ㅍ

 

Gradler (109,780 포인트) 님이 2015년 4월 29일 답변
치솟음님이 2015년 6월 26일 채택됨
감사합니다. 잘 됩니다!!
...