У меня есть файл Rive. Но при его рендеринге необходимо пространство, необходимое для отображения анимации. Получается, что я хочу, чтобы он занимал пространство значка и что он не включает в себя все пространство для анимации. Я попробовал несколько способов, но не могу найти способ сделать это. .jpg " /> < /p>
На картинках синий фон, по крайней мере, высота - это пространство, необходимое для создания анимации. И вот как он отображается, в первом - с меньшим размером, значок регулируется до такого размера, поскольку ему требуется необходимое пространство для анимации. Во втором вы можете увидеть, как анимация отображается в требуемом пространстве. Что я хочу сделать, так это то, что он не нуждается в том, что все пространство в синем, только икона, отбрасывая пространство, которое оно нужно для анимации. Это возможно? < /P>
My code:
@Composable
fun BoxScope.VideoView(
mediaPlayer: Player,
scrubberPlayer: Player,
showVideo: Boolean,
videoId: String,
videoResolution: VideoState.Resolution,
isLikedVideo: Boolean,
likes: String,
shares: String,
animatedEffect: AnimatedEffect,
timeBarState: TimeBarState,
onIntent: (SportsCenterForYouIntent) -> Unit,
) {
var animation: RiveAnimationView? by remember { mutableStateOf(null) }
if (showVideo) {
VideoSurfaceView(
modifier = Modifier
.fillMaxSize(),
mediaPlayer = mediaPlayer,
videoResolution = videoResolution,
onDoubleTapLike = {
animation?.fireState("stateMachine", "tapTrigger")
},
onTapPlayPauseVideo = { onIntent(SportsCenterForYouIntent.TogglePlayPause) }
)
PlayPauseIcon(
animatedEffect = animatedEffect,
modifier = Modifier.align(Alignment.Center),
)
TimeBar(
scrubberPlayer = scrubberPlayer,
timeBarState = timeBarState,
videoResolution = videoResolution,
modifier = Modifier.align(Alignment.BottomCenter),
onIntent = onIntent,
)
ContentReaction(
modifier = Modifier
.padding(bottom = 96.dp, end = 14.dp)
.align(Alignment.BottomEnd)
.background(Color.Red),
isLikedVideo = isLikedVideo,
likes = likes,
shares = shares,
toggleLikeUnlikeClick = {
onIntent(SportsCenterForYouIntent.ToggleLikeUnlike(videoId))
},
shareContentClick = {
onIntent(SportsCenterForYouIntent.ShareContent(videoId))
},
onInit = {view ->
animation = view
}
)
}
}
@Composable
fun ContentReaction(
modifier: Modifier = Modifier,
isLikedVideo: Boolean,
likes: String,
shares: String,
toggleLikeUnlikeClick: () -> Unit,
shareContentClick: () -> Unit,
onInit: (RiveAnimationView) -> Unit
) {
Column(
modifier = modifier,
horizontalAlignment = Alignment.CenterHorizontally
) {
LikeReaction(
riveResource = R.raw.likebutton_03,
artboardName = "heart_Particle",
stateMachineName = "stateMachine",
isLikedVideo = isLikedVideo,
likes = likes,
toggleLikeUnlike = toggleLikeUnlikeClick,
onInit = onInit
)
Spacer(Modifier.height(24.dp))
IconButton(
R.drawable.share_social_fill,
onClick = shareContentClick,
contentDescription = "Share"
)
Text(
text = shares,
fontSize = 10.sp,
lineHeight = 14.sp,
)
}
}
@Composable
fun LikeReaction(
@RawRes riveResource: Int,
autoplay: Boolean = false,
artboardName: String? = null,
animationName: String? = null,
stateMachineName: String? = null,
fit: Fit = Fit.CONTAIN,
alignment: RiveAlignment = RiveAlignment.CENTER,
loop: Loop = Loop.AUTO,
contentDescription: String? = null,
isLikedVideo: Boolean,
likes: String,
modifier: Modifier = Modifier,
toggleLikeUnlike: () -> Unit,
onInit: (RiveAnimationView) -> Unit
) {
val semantics = if(contentDescription != null) {
Modifier.semantics {
this.contentDescription = contentDescription
this.role = Role.Button
}
} else {
Modifier
}
AndroidView(
modifier = modifier
.size(96.dp)
.background(Color.Blue)
.clipToBounds()
.then(semantics),
factory = { context ->
RiveAnimationView(context).apply {
setRiveResource(
riveResource,
artboardName,
animationName,
stateMachineName,
autoplay,
fit,
alignment,
loop
)
setBooleanState(stateMachineName ?: "", "hasLiked", isLikedVideo)
//addEventListener(RiveEventListener(toggleLikeUnlike))
registerListener(RiveAnimationListener(toggleLikeUnlike))
}
//LowLevelRiveView(context)
},
update = { view ->
onInit(view)
}
)
Spacer(Modifier.height(4.dp))
Text(
text = likes,
fontSize = 10.sp,
lineHeight = 14.sp,
)
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... id-compose
Как избежать дополнительного места для анимации Rive Android Compose ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение