Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jetpack Compose中连续运动的Kotlin动画_Java_Android_Kotlin_Android Jetpack Compose - Fatal编程技术网

Java Jetpack Compose中连续运动的Kotlin动画

Java 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

我试图让一个盒子或图像对象能够使用从控制台/命令行或外部应用程序接收的X和Y坐标在屏幕上进行转换。有没有办法调整Kotlin修改器PointerInput()以接受连续的X和Y输入,而不是检测拖动手势?我正在使用Jetpack Compose API

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
}
}
}
}```