Как избежать дополнительного места для анимации Rive Android ComposeAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как избежать дополнительного места для анимации Rive Android Compose

Сообщение Anonymous »

У меня есть файл 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»