Android 는 하위 View 의 위치 와 좌 표를 어떻게 가 져 옵 니까?

보다
1.1,개요 보기
보기(View)는 용기 로 레이아웃 을 전담 합 니 다.TextView,LinearLayout 등 화면 에 표 시 된 다양한 보기 로 표 시 됩 니 다.
1.2,보기 분류
View 는 주로 두 가지 로 나 뉘 는데 구체 적 으로 다음 표 와 같다.
유별
예시
특징.
단일 보기
TextView,EditText 와 같은 보기
하위 뷰 포함 하지 않 음
보기 그룹
RelativeLayout 와 같은 여러 View 로 구 성 된 View Group 입 니 다.
하위 뷰 포함
1.3,View 클래스 소개
View 클래스 는 Android 의 각종 구성 요소 의 기본 클래스 입 니 다.
View 의 구조 함 수 는 네 가지 가 있 는데 구체 적 으로 다음 과 같다.

public View(Context context) {

}

public View(Context context, @Nullable AttributeSet attrs) {
 this(context, attrs, 0);
}

public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
 this(context, attrs, defStyleAttr, 0);
}
 
public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
 
}
소스 코드 에서 View 의 구조 함수

원본 코드 의 주석 을 통 해 우 리 는 알 수 있다.
  • View 가 자바 코드 에 new 가 있다 면 첫 번 째 구조 함수 인>View(Context)를 호출 합 니 다
  • View 가 xml 에서 설명 한 것 이 라면 두 번 째 구조 함수 인>View(Context,AttributeSet)를 호출 합 니 다
  • 2.안 드 로 이 드 좌표계
    Android 좌표계 와 수학 적 좌표계 가 다 릅 니 다.정 의 는 다음 과 같 습 니 다.
    4.567917.화면의 왼쪽 상단 은 좌표 원점 이다4.567917.오른쪽으로 x 축 증대 방향 이다
  • 아래로 Y 축 증대 방향..
  • 구체 적 인 것 은 다음 그림 과 같다.

    3.View 의 위치
    View 의 위 치 는 부모 컨트롤 에 비해 4 개의 정점 에서 확 정 됩 니 다.다음 그림 A,B,C,D 와 같 습 니 다.
     
    View 의 위 치 를 확인 하 는 데 네 개의 매개 변수 가 있 는데 그것 이 바로 Top,Bottom,Left,Right 이다.
  • Top:자 View 왼쪽 상단 은 부모 View 상단 의 거리 입 니 다
  • Left:자 View 왼쪽 상단 거 리 는 부 View 왼쪽 거리 입 니 다
  • 4.567917.Bottom:자 View 오른쪽 아래 각 거 리 는 아버지 View 상단 의 거리 입 니 다4.567917.Right:자 View 오른쪽 아래 각 거 리 는 아버지 View 왼쪽 의 거리구체 적 인 것 은 다음 그림 과 같다.

    4.View 위 치 를 가 져 오 는 방법
    View 의 위 치 는 getTop(),getLeft(),getBottom(),getRight()함 수 를 통 해 얻 을 수 있 습 니 다.
    여기 서 나 는 이 네 가지 방법 을 보 여 주 는 작은 예 를 썼 다.다음 과 같다.(내부 서브 View 의 위 치 를 가 져 오기)
     
    View 의 위 치 를 보 여주 기 위해 서 입 니 다.모든 저 는 절대적 인 구 조 를 사용 하고 크기 의 단 위 는 px 를 사용 합 니 다.구체 적 인 구 조 는 다음 과 같 습 니 다.
    
    <?xml version="1.0" encoding="utf-8"?>
    <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     tools:context=".MainActivity">
    
     <RelativeLayout
      android:id="@+id/rl_1"
      android:layout_width="600px"
      android:layout_height="600px"
      android:layout_x="200px"
      android:layout_y="200px"
      android:background="@color/colorPrimaryDark">
    
      <View
       android:id="@+id/view"
       android:layout_width="300px"
       android:layout_height="300px"
       android:layout_centerInParent="true"
       android:background="@color/colorAccent" />
    
     </RelativeLayout>
    
    </AbsoluteLayout>
    
    우 리 는 지금 네 가지 방법 으로 View 의 위 치 를 얻 습 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.
    
    public class CoordinateActivity extends AppCompatActivity {
    
     private View mView;
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_coordinate);
    
      rl1 = findViewById(R.id.rl_1);
      mView = findViewById(R.id.view);
    
     }
    
     @Override
     protected void onResume() {
      super.onResume();
    
      new Handler().postDelayed(new Runnable() {
       @Override
       public void run() {
        MyLogUtils.i(mView.getTop() + "--Top --mView");
        MyLogUtils.i(mView.getBottom() + "--Bottom --mView");
        MyLogUtils.i(mView.getLeft() + "--Left --mView");
        MyLogUtils.i(mView.getRight() + "--Right --mView");
        MyLogUtils.i(mView.getX() + "--X --mView");
        MyLogUtils.i(mView.getY() + "--Y --mView");
       }
      }, 200);
     }
    }
    
    인쇄 결 과 는 다음 과 같다.

    가장 바깥쪽 보라색 View 의 좌 표 는(200,200)이 고 크기 는 600 px 입 니 다.그 내부 에 300 px 크기 의 하위 View 가 그 중심 에 있 기 때문에 상기 인쇄 결 과 는 완전히 정확 합 니 다.
    주의:
  • 제 가 여기 서 getTop()을 호출 하 는 방법 은 onResume()안에 있 고 200 ms 지연 되 었 습 니 다.지연 되 지 않 고 직접 호출 하면 View 가 아직 다 그리 지 않 았 기 때문에 얻 은 위 치 는 0 이기 때문에 가장 간단 한 지연 으로 처 리 했 습 니 다(여기 서 처리 방법 이 많 습 니 다.예 를 들 어 View.post()등)
  • getX()와 getY()는 하위 View 가 부모 용기 에 대한 좌 표를 가 져 온 다 는 뜻 이기 때문에 결 과 는 모두 150 이다
  • 총결산
    안 드 로 이 드 가 하위 뷰 의 위치 와 좌 표를 어떻게 가 져 오 는 지 에 관 한 글 은 여기까지 입 니 다.더 많은 안 드 로 이 드 가 하위 뷰 의 위치 와 좌 표를 가 져 오 는 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기