如何解决如何在Jetpack Compose中获取onTouchEvent?
在正常情况下,我们可以拥有 $sheet = new \Google_Service_Sheets($this->client);
$range = "'" . $sheetName . "'!" . $rangeArg . (strlen($rangeArg) == 2 ? '' : count($data) + 1000);
$response = $sheet->spreadsheets_values->get($this->sheetId,$range);
if (!$clear && $response && $response->values) {
$c = count($response->values);
$newRange = (intval(substr($rangeArg,1,1)) + $c);
$newRange = substr($rangeArg,1) . $newRange . substr($rangeArg,2);
$range = "'" . $sheetName . "'!" . $newRange . (count($data) + 1000);
}
$options = ['valueInputoption' => 'RAW'];
if ($clear) {
$sheet->spreadsheets_values->clear($this->sheetId,$range,new \Google_Service_Sheets_ClearValuesRequest);
}
$body = new \Google_Service_Sheets_ValueRange(['values' => $data,'majorDimension' => $columns ? 'COLUMNS' : 'ROWS']);
$ok = $sheet->spreadsheets_values->append($this->sheetId,$body,$options);
}
getLastColumn()
在Jetpack Compose中,我只能发现修饰符中有google/apiclient v2.5.0
google/apiclient-services v0.138
google/auth v1.9.0
,该修饰符仅执行onTouchEvent
中的操作。
override fun onTouchEvent(event: MotionEvent?): Boolean {
when (event?.action) {
MotionEvent.ACTION_DOWN -> {}
MotionEvent.ACTION_MOVE -> {}
MotionEvent.ACTION_UP -> {}
else -> return false
}
invalidate()
return true
}
Jetpack Compose是否有等效的tapGestureFilter
?
解决方法
为此我们有一个单独的package,这非常有用。 有两种主要的扩展功能适合您:
如果您想处理和处理事件,我建议使用pointerInteropFilter
的类似形式的View.onTouchEvent
。它与modifier
一起使用:
Column(modifier = Modifier.pointerInteropFilter {
when (it.action) {
MotionEvent.ACTION_DOWN -> {}
MotionEvent.ACTION_MOVE -> {}
MotionEvent.ACTION_UP -> {}
else -> false
}
true
})
这将是根据您指定的View.onTouchEvent
样本组成的调整后代码。
P.S。不要忘记@ExperimentalPointerInput
注释。
经过研究,看起来可以使用dragGestureFilter
,并与tapGestureFilter
混合
Modifier
.dragGestureFilter(object: DragObserver {
override fun onDrag(dragDistance: Offset): Offset {
Log.d("Track","onActionMove ${dragDistance.x} | ${dragDistance.y}")
return super.onDrag(dragDistance)
}
override fun onStart(downPosition: Offset) {
Log.d("Track","onActionDown ${downPosition.x} | ${downPosition.y}")
super.onStart(downPosition)
}
override fun onStop(velocity: Offset) {
Log.d("Track","onStop ${velocity.x} | ${velocity.y}")
super.onStop(velocity)
}
},{ true })
.tapGestureFilter {
Log.d("NGVL","onActionUp ${it.x} | ${it.y}")
}
之所以仍然使用tagGestureFilter
是因为onStop
不提供位置,而是提供速度,因此tapGestureFilter
确实提供了最后一个位置(如果需要)
可能有点晚了,但由于 compose 不断更新,所以我今天的做法是这样的:
Modifier
.pointerInput(Unit) {
detectTapGestures {...}
}
.pointerInput(Unit) {
detectDragGestures { change,dragAmount -> ...}
})
我们还有 detectHorizontalDragGestures
和 detectVerticalDragGestures
来帮助我们。
ps:1.0.0-beta03
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。