首页 > 解决方案 > 如何旋转 ImageView 和 Carousel

问题描述

我正在使用库gtomato/carouselview创建一个轮播。旋转木马本身已完成并正在工作。但是我在 Carousel 旁边有一个 ImageView,我希望它与 Carousel 一起旋转/变换;而是顺时针、逆时针或停止旋转,它应该跟随旋转木马。

轮播看起来像这样:

在此处输入图像描述

当它旋转时,图像应该随之旋转。

我尝试了以下没有运气。图像顺时针旋转约 25 度,仅此而已。即使我逆时针旋转旋转木马,图像也会顺时针旋转大约 25 度。当我“甩动”旋转木马以连续旋转时也会这样做。

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        // Inflate the layout for this fragment
        var v = inflater.inflate(R.layout.fragment_carousel, container, false)

        carousel = v.findViewById(R.id.carousel)
        cylinder = v.findViewById(R.id.cylinder)

        carousel?.transformer = WheelViewTransformer()
        carousel?.adapter = CarouselAdapter()
        carousel?.isInfinite = true
        carousel?.gravity = Gravity.CENTER_HORIZONTAL

        carousel?.setOnScrollListener(object: CarouselView.OnScrollListener() {
            override fun onScrollBegin(carouselView: CarouselView?) {

                super.onScrollBegin(carouselView)

                var scroll = carouselView?.currentOffset
                var rotPercentage = scroll!! / carouselView?.adapter!!.itemCount

                var r = cylinder?.rotation

                cylinder?.animate()!!.rotationBy(((2 * Math.PI -rotPercentage)).toFloat())
            }
        })

        return v
}

使用 iOS 和 iCarousel,我可以执行以下操作并相应地工作:

func carouselDidScroll(_ carousel: iCarousel) {
    let scroll: CGFloat = carousel.scrollOffset
    let rotPercentage = scroll / CGFloat(carousel.numberOfVisibleItems)
    _cylinderImage.transform = CGAffineTransform(rotationAngle: 2 * .pi * -rotPercentage) 
}

标签: androidkotlinimageviewcarousel

解决方案


下面的库效果更好。附带一种将背景图像添加到轮播的方法。

https://github.com/LukeDeighton/WheelView


推荐阅读