android - 停止 Jetpack Compose 指针InteropFilter 使用输入事件
问题描述
我有一个Column
有两个孩子的垂直:
- 一个
Pager
可组合的(来自Accompanist),它显示Text
. Canvas
绘制两条弧线和一个圆的可组合项。
它们按照此处描述的相同顺序进行排序。我希望Text
始终在Canvas
.
实施细节
可Canvas
组合的有一个Modifier.pointerInteropFilter
处理MotionEvent.ACTION_DOWN
和MotionEvent.ACTION_MOVE
。如果事件不在弧的 10% 距离内,则忽略并false
返回。
我的理解是返回false
将表明该事件尚未被消耗,因此将被传递以供Pager
处理 - 但事实并非如此。一旦Modifier.pointerInteropFilter
被注册,则Pager
永远不会接收输入事件,无论返回true
或false
。
布局
为简洁起见,下面是我当前实现的简化版本。我有一个Column
渲染第Pager
一个,然后是Canvas
.
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center
) {
// The Pager should always be rendered behind the Canvas. This is to
// prevent the Text from rending on top when being dragged.
HorizontalPager(
state = rememberPagerState(pageCount = 8000, initialPage = 4000)
) { page ->
Text(
modifier = Modifier.fillMaxWidth(),
text = "25:00",
textAlign = TextAlign.Center,
fontSize = 60.sp
)
}
}
var progress by remember { mutableStateOf(0.25f) }
ArcSeekBar(progress, false) { change ->
progress = change
}
在此示例中,我将 硬编码pointerInteropFilter
为始终返回 false,假设它不会消耗/阻止事件,允许它传递到Pager
.
@Composable
fun ArcSeekBar(progress: Float, interaction: Boolean, changed: (Float) -> Unit) {
val sweepAngle = 270.0f
var width: Int by remember { mutableStateOf(0) }
var height: Int by remember { mutableStateOf(0) }
Canvas(
modifier = Modifier
.fillMaxSize()
.aspectRatio(1.0f)
.onSizeChanged {
width = it.width
height = it.height
}
.pointerInteropFilter {
// Reduced for brevity, but whatever the function returns
// the Pager composable behind it will never receive input events.
false
},
) {
// Omitted for brevity, draw two arcs and a circle
}
}
作为参考,我的布局产生以下内容:
解决方案
推荐阅读
- android - fetch SyntaxError: Unexpected token U in JSON at position 0 in react native Android
- php - 我想打印数字模式程序,但它不会给我错误的输出
- python - Azure App Service:在容器端指定 docker run 端口
- sql - Postgress to_date 和提取组合
- javascript - 使用 React 动态导入文件
- javascript - 仅在选项卡关闭时使用 beforeunload
- loops - 如何在不运行以下脚本的情况下退出循环
- sql - 尝试在 SQL DEVELOPER 上创建表时出现问题
- python - 可视化神经网络
- arduino - Zapier 问题 - 找不到 Webhook 示例