Drag를 이용하여 Activity 전환하기
휴대폰 화면을 드래그하여 화면을 전환하는 방법을 알아보겠습니다.
View.setOnTouchListener()를 이용하여 이벤트를 처리합니다.
Activity에서 onTouch-Event 감지
이벤트를 처리할 Activity에서 View.setOnTouchListener() 이벤트를 선언합니다.
DragEvent dragEvent = new DragEvent( getApplicationContext(), getClass() );
View view = findViewById( R.id.layoutBgMain );
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return dragEvent.onTouch( v, event );
}
});
[소스] Activity.java 소스의 onTouch() 이벤트
View객체는 OnTouch()이벤트를 처리할 객체입니다.
onTouch() 이벤트의 MotionEvent는 사용자의 동작을 관리합니다.
위의 예저에서는 DragEvent라는 Class를 생성하여 처리하였습니다.
여러 화면에 적용할 것을 감안한 구조입니다.
package com.onemoresg.referencebook;
import android.content.Context;
import android.content.Intent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
import java.util.ArrayList;
public class DragEvent {
ArrayList<Class> arrClass = new ArrayList<Class>();
Context context;
Class mClass;
float distance = 0;
public DragEvent(Context context, Class pClass ) {
this.context = context;
this.mClass = pClass;
arrClass.add( MainActivity.class );
arrClass.add( SearchActivity.class );
arrClass.add( InfoActivity.class );
arrClass.add( ActivityRegister.class );
}
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 손가락을 touch 했을 떄 x 좌표값 저장
distance = event.getX();
break;
case MotionEvent.ACTION_UP:
// 손가락을 떼었을 때 저장해놓은 x좌표와의 거리 비교
// 해당 거리가 100이 되지 않으면 이벤트 처리 하지 않는다.
distance = distance - event.getX();
if (Math.abs(distance) < 100) { return false; }
int iClassIdx = arrClass.indexOf( mClass ); // 현재 Activity의 Index
if ( distance > 0 ) {
// 손가락을 왼쪽으로 움직였으면 오른쪽 화면이 나타나야 한다.
if( iClassIdx == arrClass.size() - 1 ) { iClassIdx = 0; }
else { iClassIdx++; }
} else {
// 손가락을 오른쪽으로 움직였으면 왼쪽 화면이 나타나야 한다.
if( iClassIdx == 0 ) { iClassIdx = arrClass.size() - 1; }
else { iClassIdx--; }
}
// 손가락을 왼쪽으로 움직였으면 오른쪽 화면이 나타나야 한다.
Intent intent = new Intent( context, arrClass.get( iClassIdx ) );
context.startActivity(intent);
break;
}
return true;
}
}
[소스] DragEvent.java
Activity의 Context정보와 Class정보
DragEvent.class의 생성자로 화면activity의 Context정보와 Activity.class정보를 전달받아 저장합니다.
- Context는 이벤트를 처리하기 위함이며
- Activity.class는 화면 전환시 현재의 화면을 인지하기 위한 용도입니다.
※ Drag이벤트를 별도의 Class로 분리하기 위해 전달받는 객체정보입니다.
MotionEvent 감지
onTouchListener에서 전달된 MotionEvent로 동작을 감지할 수 있습니다.
MotionEvent | |
- ACTION_DOWN : 터치 되었을때( 화면에 손을 댔을 때 ) - ACTION_MOVE : 누른 상태에서 움직였을 때 (Drag) - ACTION_UP : 화면에서 손을 땠을 때 |
위의 소스에서는 ACTION_DOWN이벤트와 ACTION_UP이벤트를 이용하여, 일정 거래 100dp이상을 움직였을 때 화면을 전환하는 로직을 구현하였습니다.
The End.
'Study > Android Studio' 카테고리의 다른 글
[Android] View의 이벤트와 리스너 (0) | 2021.02.04 |
---|---|
[Android] Activity 생명주기 - <작성중> (0) | 2021.02.04 |
[Android] APK 배포시 Database정보 포함하기 (0) | 2021.02.01 |
[Android] Paly스토어에 앱 게시하기 (0) | 2021.01.30 |
[Android] 앱에 애드몹 광고 넣기 (0) | 2021.01.30 |