Java Jetpack Compose中连续运动的Kotlin动画
我试图让一个盒子或图像对象能够使用从控制台/命令行或外部应用程序接收的X和Y坐标在屏幕上进行转换。有没有办法调整Kotlin修改器PointerInput()以接受连续的X和Y输入,而不是检测拖动手势?我正在使用Jetpack Compose APIJava Jetpack Compose中连续运动的Kotlin动画,java,android,kotlin,android-jetpack-compose,Java,Android,Kotlin,Android Jetpack Compose,我试图让一个盒子或图像对象能够使用从控制台/命令行或外部应用程序接收的X和Y坐标在屏幕上进行转换。有没有办法调整Kotlin修改器PointerInput()以接受连续的X和Y输入,而不是检测拖动手势?我正在使用Jetpack Compose API class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedIns
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val animationState = remember{ mutableStateOf(false)}
var offsetX by remember { mutableStateOf(0.dp) }
var offsetY by remember { mutableStateOf(0.dp) }
val imageSize = 200.dp
// Receive X,Y inputs from some device or continously read from command line inputs
do{
offsetX = 0.dp
offsetY = 5000.dp
} while(animationState.value)
BoxWithConstraints(
modifier = Modifier
.fillMaxSize()
.background(color = Color.White)
) {
someImage(
flashyMovement = animationState.value,
maxWidth = maxWidth,
maxHeight = maxHeight,
offsetX = offsetX,
offsetY = offsetY
)
}
}
@Composable
fun someImage(
maxWidth: Dp,
maxHeight: Dp,
offsetX: Dp,
offsetY: Dp) {
val resource: Painter
val modifier: Modifier
val imageSize = 200.dp
val xPositionState = infiniteTransition.animateFloat(
initialValue = 0f,
targetValue = 1f,
animationSpec = infiniteRepeatable(
animation = tween(
durationMillis = 20000,
easing = LinearEasing
)
)
)
modifier = Modifier.offset(
x = offsetX,
y = offsetY
)
}
Image(
modifier = modifier.width(imageSize).height(imageSize),
painter = resource,
contentDescription = "some Image",
)}
Box() {
var offsetX by remember { mutableStateOf(0f) }
var offsetY by remember { mutableStateOf(0f) }
Box(
Modifier
.offset { IntOffset(offsetX.roundToInt(), offsetY.roundToInt()) }
.background(Color.Blue)
.size(150.dp)
//.border(BorderStroke(2.dp, SolidColor(Color.Red)))
.pointerInput(Unit) {
detectDragGestures { change, dragAmount ->
change.consumeAllChanges()
//offsetX += dragAmount.x
offsetX = 150.dp.toFloat()
offsetY += dragAmount.y
}
}
)
您不必使用状态来更新视图。只要按需调用
setContent
,并传递新数据即可
fun offsetUpdated(x: Int, y: Int) {
setContent {
// pass your offset to the composable function
}
}
内部Modifier.offset{IntOffset(OffsetX.value,OffsetY.value)}
.pointerInput(单位)
var OffsetX = remember { Animatable(0f) }
var OffsetY = //same as abov
coroutineScope.launch{
while(true)
pointerID = awaitPointerEvent{ awaitFirstDown().id }
drag(pointerID){change ->
offsetX.snapTo(offsetX.value + change.positionChange().x)
//Similarly for Y
}
}
}
}```