Android scrollTo 와 scrollBy 방법 사용 분석

하나의 View 에서 시스템 은 scrollTo,scrollBy 두 가지 방식 으로 View 의 위 치 를 바 꿉 니 다.이 두 가지 방법의 차 이 는 매우 이해 하기 쉽다.영어 에서 To 와 By 의 차이 와 유사 하 다.scrollTo(x,y)표 지 는 구체 적 인 좌표 점(x,y)으로 이동 하고 scrollBy(dx,dy)는 이동 의 증 가 량 이 dx,dy 임 을 나타 낸다.
오프셋 을 가 져 온 후 scrollBy 를 사용 하여 View 를 이동 합 니 다.코드 는 다음 과 같 습 니 다.

int offsetX = x - lastX; 
int offsetY = y - lastY; 
scrollBy(offsetX, offsetY); 
    하지만 우리 가 View 를 끌 었 을 때 View 가 움 직 이지 않 았 다 는 것 을 알 게 될 것 입 니 다!우리 방법 이 틀 렸 나?사실 방법 은 틀 리 지 않 았 습 니 다.View 도 확실히 움 직 였 습 니 다.다만 그것 이 움 직 이 는 것 은 우리 가 움 직 이 고 싶 은 것 이 아 닙 니 다.scrollto,scrollBy 방법 은 View 의 content 를 이동 시 키 는 것 입 니 다.즉,View 의 내용 을 이동 시 키 는 것 입 니 다.ViewGroup 에서 scrollTo,scrollBy 방법 을 사용 하면 모든 하위 View 를 이동 하지만 View 에서 사용 하면 View 의 내용 을 이동 합 니 다.예 를 들 어 TextView,content 는 텍스트 입 니 다.ImageView,content 는 drawable 대상 입 니 다.
    위의 분석 을 통 해 왜 더 이상 View 에서 이 두 가지 방법 으로 이 View 를 끌 수 없 는 지 알 수 있 을 것 이 라 고 믿 습 니 다.그러면 우 리 는 모든 View Group 에서 scrollBy 방법 을 사용 하여 하위 View 를 이동 해 야 합 니 다.코드 는 다음 과 같 습 니 다.

((View) getParent()).scrollBy(offsetX, offsetY); 
    그러나 View 를 다시 끌 면 View 가 움 직 였 지만 움 직 이 고 있 는 것 을 발견 할 수 있 습 니 다.우리 가 원 하 는 터치 포인트 에 따라 움 직 이 는 것 이 아 닙 니 다.이곳 에 서 는 먼저 보기 이동 에 대한 지식 을 알 아야 한다.여러분 이 이 문 제 를 이해 할 때 핸드폰 화면 이 중 공의 캡 플레이트 라 고 상상 해 보 세 요.캡 플레이트 아래 는 커 다란 캔버스,즉 우리 가 표시 하고 자 하 는 보기 입 니 다.이 캡 플레이트 를 캔버스 어 딘 가 에 덮 었 을 때 중간 사각형 을 통 해 우 리 는 핸드폰 화면 에 보 기 를 표시 하려 고 하 는 것 을 보 았 고 캔버스 에 있 는 다른 곳 의 보 기 는 캡 플레이트 에 덮 여 보이 지 않 았 다.우리 의 보 기 는 이 예 와 매우 유사 합 니 다.우 리 는 보 기 를 보지 못 했다 고 해서 그것 이 존재 하지 않 는 것 이 아니 라 화면 밖 에 있 을 수도 있 습 니 다.scrollBy 방법 을 호출 할 때 바깥 의 캡 플레이트 가 이동 하고 있다 고 상상 할 수 있 습 니 다.이렇게 말 하면 추상 적 이 고 구체 적 인 예 를 볼 수 있 습 니 다.
    다음 그림:중간의 사각형 은 화면,즉 시각 영역 에 해당 합 니 다.뒤의 content 는 캔버스 에 해당 하 며 보 기 를 대표 합 니 다.보시 다시 피 보기 의 중간 부분 만 현재 시각 적 이 고 다른 부분 은 보이 지 않 습 니 다.보 이 는 영역 에서 우 리 는 Button 을 설 치 했 습 니 다.좌 표 는(20,10)입 니 다.
    다음은 scrollBy 방법 을 사용 하여 캡 플레이트(화면,시각 영역)를 수평 방향 에서 X 축 정방 향(오른쪽)으로 20,수직 방향 에서 Y 축 정방 향(아래)으로 10 을 평평 하 게 이동 합 니 다.
    scrollBy(20,10)를 설 치 했 지만 편 이 량 은 모두 X 축,Y 축 정방 향 의 정수 이지 만 화면의 시각 영역 에서 Button 은 X 축,Y 축 마이너스 방향 으로 이동 한 것 을 알 수 있다.이것 이 바로 참고 학과 의 선택 이 다 르 기 때문에 발생 하 는 서로 다른 효과 다.
    위의 분석 을 통 해 scrollBy 의 매개 변수 dx 와 dy 를 인증서 로 설정 하면 content 는 좌표 마이너스 방향 으로 이동 하 는 것 을 알 수 있 습 니 다.scrollBy 의 인자 dx 와 dy 를 마이너스 로 설정 하면 content 는 좌표 축 정방 향 으로 이동 합 니 다.따라서 앞의 예 로 돌아 가 손가락 을 따라 움 직 이 는 효 과 를 실현 하려 면 오프셋 을 마이너스 로 바 꿔 야 합 니 다.코드 는 다음 과 같 습 니 다.

int offsetX = x - lastY; 
int offsetY = y - lastY; 
((View) getParent()).scrollBy(-offsetX,-offsetY); 
                다시 한 번 시험 해 보면 효과 가 앞의 몇 가지 방식 의 효과 와 같다 는 것 을 알 수 있다.이와 유사 하 게 절대 좌 표를 사용 할 때 도 scrollTo 방법 으로 이 효 과 를 실현 할 수 있다.

총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 안 드 로 이 드 scrollTo 와 scrollBy 방법 을 사용 하여 해석 한 것 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기