You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CarouselView中右滑手势无法正确切换至上一张卡片的问题求助

CarouselView中右滑手势无法正确切换至上一张卡片的问题求助

大家好,我最近在处理CarouselView的手势交互时遇到了一个棘手的问题,想请教下各位开发者。我做了一个带卡片的轮播视图,希望支持上下左右四个方向的滑动切换,目前上下左三个方向都能正常工作,唯独右滑的时候出问题——本来右滑应该切换到上一张卡片,但每次操作后还是显示当前的卡片。

下面是我的代码片段:

_Cards = new CarouselView
{
    VerticalOptions = LayoutOptions.Start,
    IsSwipeEnabled = false,
    Loop = true
};
_Cards.ItemsSource = cards.CardSeq;
Border CardBorder = new Border
{
    Content = new Label() { },
};
async Task MySwipe(SwipeDirection dir)
{
    
    if (isAnimating) return;
    isAnimating = true;
    switch (dir)
    {
        case SwipeDirection.Up:
            await CardBorder.TranslateTo(0, -cardHeight, 300, Easing.SinIn);
            App.Database.GetReward((_Cards.CurrentItem as dict)!.Number, true);
            break;
        case SwipeDirection.Down:
            await CardBorder.TranslateTo(0, cardHeight, 300, Easing.SinIn);
            App.Database.GetReward((_Cards.CurrentItem as dict)!.Number, false);
            break;
        case SwipeDirection.Left:
            await CardBorder.TranslateTo(-cardWidth, 0, 300, Easing.SinIn);
            break;
        case SwipeDirection.Right:
            await CardBorder.TranslateTo(cardWidth, 0, 300, Easing.SinIn);
            break;
    };
    //CardBorder.Opacity = 0;
    if (dir != SwipeDirection.Right)
        _Cards.Position = (_Cards.Position + 1) % cards.CardSeq.Count;
    else
        _Cards.Position = (_Cards.Position - 1 + cards.CardSeq.Count) % cards.CardSeq.Count;
    CardBorder.TranslationY = 0;
    CardBorder.TranslationX = 0;
    CardBorder.Opacity = 1;
    isAnimating = false;
}
<...>
CardBorder.GestureRecognizers.Add(new SwipeGestureRecognizer
{
    Direction = SwipeDirection.Up,
    Command = new Command(async () => await MySwipe(SwipeDirection.Up))
});
CardBorder.GestureRecognizers.Add(new SwipeGestureRecognizer
{
    Direction = SwipeDirection.Down,
    Command = new Command(async () => await MySwipe(SwipeDirection.Down))
});
CardBorder.GestureRecognizers.Add(new SwipeGestureRecognizer
{
    Direction = SwipeDirection.Left,
    Command = new Command(async () => await MySwipe(SwipeDirection.Left))
});
CardBorder.GestureRecognizers.Add(new SwipeGestureRecognizer
{
    Direction = SwipeDirection.Right,
    Command = new Command(async () => await MySwipe(SwipeDirection.Right))
});

逻辑上,当触发右滑(SwipeDirection.Right)时,我计算的是(_Cards.Position - 1 + cards.CardSeq.Count) % cards.CardSeq.Count,比如当前位置是3的话应该变成2,但实际操作后位置又立刻变回3了。有没有大佬知道这是为什么,该怎么解决这个问题呢?

备注:内容来源于stack exchange,提问作者t232006

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:23:01