android 컨트롤 드래그 효과 구현
분석 하 다.
setOnClickListener
setOnClickListener 는 컨트롤 의 클릭 동작 을 받 을 수 있 으 며 반환 값 이 없습니다.
컨트롤 을 끌 려 면 setOnTouch Listener 를 이용 하여 스스로 정의 해 야 합 니 다.
setOnTouchListener
눌 렀 을 때의 좌표 와 이동 할 때의 좌표 간 의 차 이 를 통 해 이동 거 리 를 계산 한 다음 에 컨트롤 의 위 치 를 변경 하여 드래그 하 는 목적 을 달성 합 니 다.
Touch 이벤트 가 실 행 된 후에 false 로 돌아 가면 클릭 이 벤트 를 계속 실행 합 니 다.우리 가 원 하 는 것 이 아 닙 니 다.트 루 대표 에 게 직접 돌아 가 이 벤트 를 처리 하면 클릭 이 벤트 를 실행 하지 않 습 니 다.우리 가 원 하 는 것 도 아 닙 니 다.
이 럴 때 는 언제 true 로 돌아 갈 지,언제 false 로 돌아 갈 지 판단 하여 클릭+드래그 의 목적 을 동시에 실현 해 야 합 니 다.
인 스 턴 스 코드
귀속 이벤트
//
floatView.floatMenuIcon.setOnTouchListener(touchListener);
// , lambda
floatView.floatMenuIcon.setOnClickListener(view -> {
EventBus.getDefault().post(AccessibilityService.GLOBAL_ACTION_BACK);
});
다시 쓰기 onTouch Listener주의 사항
ACTION_UP 는 손가락 을 들 어 올 릴 때 실 행 된 이벤트 로 이벤트 의 판단 을 누 르 면 여기에 놓 습 니 다.누 를 때의 좌표 와 들 어 올 릴 때의 좌표 차이 가 크 지 않 으 면 우 리 는 클릭 동작 으로 간주 하고 후기 에 긴 동작 이나 더 블 클릭 동작 을 처리 해 야 한다 면 이치 차이 가 많 지 않 습 니 다.
전체 코드
private final View.OnTouchListener touchListener = new View.OnTouchListener() {
// ,
private float dX;
private float dY;
// ,
private float sX;
private float sY;
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
dX = motionEvent.getRawX();
dY = motionEvent.getRawY();
sX = motionEvent.getRawX();
sY = motionEvent.getRawY();
break;
case MotionEvent.ACTION_MOVE:
// , , , ACTION_MOVE
float nX = (int) motionEvent.getRawX();
float nY = (int) motionEvent.getRawY();
float cW = nX - dX;
float cH = nY - dY;
dX = nX;
dY = nY;
layoutParams.x = (int) (layoutParams.x + cW);
layoutParams.y = (int) (layoutParams.y + cH);
windowManager.updateViewLayout(mView, layoutParams);
break;
case MotionEvent.ACTION_UP:
//
// ,
if (Math.abs(motionEvent.getRawX() - sX) > 6 && Math.abs(motionEvent.getRawY() - sY) > 6) {
return true;
}
break;
}
return false;
}
};
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.