在正常情况下,我们可以拥有 $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, 0, 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, $range, $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
?
答案 0 :(得分:1)
为此我们有一个单独的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
注释。
答案 1 :(得分:0)
经过研究,看起来可以使用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
确实提供了最后一个位置(如果需要)
答案 2 :(得分:0)
可能有点晚了,但由于 compose 不断更新,所以我今天的做法是这样的:
Modifier
.pointerInput(Unit) {
detectTapGestures {...}
}
.pointerInput(Unit) {
detectDragGestures { change, dragAmount -> ...}
})
我们还有 detectHorizontalDragGestures
和 detectVerticalDragGestures
来帮助我们。
ps:1.0.0-beta03