[Flutter] Stylus 스타일러스 펜 인식 1차

김은상·2022년 12월 7일
3
post-thumbnail

필압이 필요할 때.

GestureDetector의 onForcePress 사용해서 print가 나오나 확인해보니 작동하지 않았다.
전면 액정 지문인식 기능이 있는 모델에는 압력센서가 빠졌다.
아이폰 포스터치 기능이 2018년 모델인 XR부터 사라져서 압력인식 기능이 없다고 합니다.

사실상 스마트폰 혹은 태블릿 자체에서 압력을 감지하는 것은 불가능해보인다.

onHover는 클릭 혹은 다운되지 않은 상태에서 위치를 알려주는 포인터(=마우스)에서만 작동합니다. 클릭이나 터치시 다른 이벤트(onTap, onPressed, …)로 넘어가며, hovering하고 있을때만 인식합니다.
tilt property는 찾아보니 onHover와 pressure와는 관련없이 입력장치가 스타일러스일 경우 해당 장치를 인식하여 기울기를 측정하는 속성입니다.

Listener의 onPointerMove의 람다함수의 파라미터로 들어가는 PointerMoveEvent에서 pressure를 찾았다.
또한 PointerMoveEvent는 kind라는 property가 있어서 event.kind == PointerDeviceKind.stylus 스타일러스인지 일반 touch인지 구분 가능하다.

pressure property는 0~1의 double값을 가진다.

필압 감지는 이를 이용해 pressure * n 으로 구현했다.

분기를 이용해서 손과 펜을 구분해도 될 것 같다.

GestureDetector(
	onPanStart: _onPanStart, //펜 시작 좌표
	onPanUpdate: _onPanUpdate, //펜 이동 좌표
    onPanEnd: _onPanEnd, //입력 종료
    child: Listener(
      behavior: HitTestBehavior.opaque,
      onPointerMove: (s) {
        if (s.kind == PointerDeviceKind.stylus) {
          setState(() {
            strockWidth = s.pressure * pressureIndex; //0~1인 필압의 n 배
          });
        }
      },
      child: CustomPaint(.......

profile
Flutter 시작

2개의 댓글

comment-user-thumbnail
2022년 12월 7일

오.. 플러터 개발자님..

답글 달기
comment-user-thumbnail
2022년 12월 7일

감사합니다

답글 달기