Android 停止Jetpack Compose pointerInteropFilter使用输入事件
我有一个垂直的Android 停止Jetpack Compose pointerInteropFilter使用输入事件,android,kotlin,android-jetpack,android-jetpack-compose,Android,Kotlin,Android Jetpack,Android Jetpack Compose,我有一个垂直的列,它有两个孩子: 一个寻呼机可组合(来自),显示文本 绘制两条弧和一个圆的画布可组合 它们的顺序与此处描述的相同。我希望文本始终呈现在画布后面 实施细节 Canvascomposable有一个处理MotionEvent.ACTION\u DOWN和MotionEvent.ACTION\u MOVE的修饰符.pointerInteropFilter。如果事件不在弧的10%距离内,则忽略该事件,并返回false 我的理解是返回false将表明事件尚未被消费,因此将被传递给寻呼机处理
列
,它有两个孩子:
寻呼机
可组合(来自),显示文本
画布
可组合文本
始终呈现在画布
后面
实施细节
Canvas
composable有一个处理MotionEvent.ACTION\u DOWN
和MotionEvent.ACTION\u MOVE
的修饰符.pointerInteropFilter
。如果事件不在弧的10%距离内,则忽略该事件,并返回false
我的理解是返回false
将表明事件尚未被消费,因此将被传递给寻呼机处理,但事实并非如此。一旦注册了修饰符.pointerInteropFilter
,无论返回true
或false
,Pager
都不会接收输入事件
布局
为了简洁起见,下面是我当前实现的简化版本。我有一个列
,它首先呈现页面
,然后呈现画布
列(
modifier=modifier.fillMaxSize(),
垂直布置=中心布置
) {
//寻呼机应始终呈现在画布后面。这是为了
//防止拖动时文本在顶部呈现。
水平寻呼机(
state=rememberPagerState(pageCount=8000,initialPage=4000)
){第页->
正文(
modifier=modifier.fillMaxWidth(),
text=“25:00”,
textAlign=textAlign.Center,
fontSize=60.sp
)
}
}
通过记住{mutableStateOf(0.25f)}
ArcSeekBar(进度,错误){change->
进步=改变
}
在本例中,我将指针teropfilter
硬编码为始终返回false,前提是它不会消耗/阻止事件,从而允许它传递到寻呼机
@Composable
趣味ArcSeekBar(进度:浮点,交互:布尔,更改:(浮点)->单位){
val扫掠角=270.0f
变量宽度:通过记住{mutableStateOf(0)}
变量高度:通过记住{mutableStateOf(0)}
帆布(
修饰语=修饰语
.fillMaxSize()
.aspectRatio(1.0f)
Onsizechange先生{
宽度=it.width
高度=it.height
}
.pointerInteropFilter{
//为简洁起见,减少了,但不管函数返回什么
//可在其后面组合的寻呼机将永远不会接收输入事件。
假的
},
) {
//为简洁起见,请省略,绘制两条圆弧和一个圆
}
}
作为参考,“我的布局”生成以下内容:
发布您的文档的相关部分code@GabrieleMariotti更新