본문 바로가기
개발/android

배경 Layout을 손가락 터치로 따라 움직이게 하는 방법

by 매몰 2013. 10. 8.

화면을 손가락으로 터치하여 따라 움직이게 하고 싶을때는 아래와 같이 하면 된다.


이것은 내 작품중에 "지하철 어디있니" 라는 앱에서 배경을 스크롤 시킬때 사용하는 방식인데...

해당부분만 따로 보기 좋게 정리한것이다.  





private LinearLayout mBgLayout;

private int mTouchDownX, mTouchDownY;


@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);


mBgLayout = (LinearLayout)findViewById(R.id.BgLayout);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

switch(event.getAction()) {

case MotionEvent.ACTION_UP:

case MotionEvent.ACTION_CANCEL:

mBgLayout.scrollBy(mTouchDownX - (int)event.getX(), mTouchDownY - (int)event.getY());

break;

case MotionEvent.ACTION_MOVE:

mBgLayout.scrollBy(mTouchDownX - (int)event.getX(),  mTouchDownY - (int)event.getY());


mTouchDownX = (int)event.getX();

    mTouchDownY = (int)event.getY();

break;

case MotionEvent.ACTION_DOWN:

mTouchDownX = (int)event.getX();

    mTouchDownY = (int)event.getY();

}

return true;

}





원리는 의외로 간단하다...

터치리스너로 화면에 손가락이 닿으면 좌표를 저장해 두었다가 손가락이 움직이면 움직인 현재좌표와 비교하여 움직인만큼 배경을 스크롤시키는것이다... 이때 다시 좌표를 저장해야 한다...


다만 리스트뷰가 있을때에는 터치이벤트가 잡히지 않으니 사용할수 없고 

배경 layout의 다른뷰에서 리스너를 사용하고 있다면 그뷰의 터치리스너에도 위소스를 붙여넣어야 한다. 왜냐하면 배경 layout보다 자식뷰의 리스너가 더 우선되기 때문이다...




도움이 되셨기를 바래요~





 

 매몰: 고영진


 1인 개발자

     실패만 하고 있어도 꿈을 포기하지 않는 남자. 

     제가 직접 경험하고 습득한 지식을 위주로 올릴게요. 








사업자 정보 표시
주식회사 머리말 | 고영진 | 서울특별시 송파구 중대로 135 서관 10층 (가락동, 아이티벤처타워) | 사업자 등록번호 : 524-88-00727 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2017-서울강남-03941호 | 사이버몰의 이용약관 바로가기