android - 如何旋转 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)
}
解决方案
下面的库效果更好。附带一种将背景图像添加到轮播的方法。
推荐阅读
- mysql - MySQL 用于统计结果
- python - 为什么可以在 Python 的父类中调用子属性,最佳实践是什么?
- wcf - 在 WCF 服务 net tcp 中使用客户端证书
- excel - excel中电源查询中的条件合并
- wmi - SCCM 数据库中 SMS_Application WMI 类的等效表
- php - Codeigniter4 - 默认情况下将数组数据返回为 JSON 而不是 XML
- google-apps-script - Google Apps 脚本在编码时不显示方法
- python - 使用枚举遍历多个列表
- python-3.x - 在 sqlite3 和 python Tkinter 中插入电子邮件字符串时出错
- javascript - animate.css 不会连续触发两次