Android 没有图像的自动滚动视图
Android Autoscrolling view without images
我目前正在尝试实现一个类似横幅的视图,其中给定一个字符串列表,该视图将一个接一个地循环显示每个字符串,并在它们到达屏幕中央时暂停。我想做的一个例子如下
在HTML中,这个元素是来自swiperjs的swiper slide,然而,Android没有原生元素可以简单地做到这一点。
我已经在线查看了几天,使用自定义 RecyclerView 测试各种实现,带有选取框的简单 TextView(没有我想要添加的暂停)并且发现大多数“解决方案" 围绕 RecyclerView、ListView 或 ViewPager,通常使用 TimerTask 来处理滚动计时。
遗憾的是,我没有找到任何有效的实现,也没有找到关于哪个视图最适合使用的指示。
所有解决方案都实现了一个图像和一个点选择器,用于显示列表中的哪个图像显示在屏幕上,但我完全不想拥有图像,我只想要一个具有相同功能的 TextView。在任何人问之前,是的,我曾尝试用 TextView 简单地替换图像,但它根本不起作用。
需要注意的一个重要方面是,因为我只是试图让一些文本滚动到视图中,所以我认为 ViewPager 不是一个有效的解决方案,因为我根本没有实现一些滚动片段。这是屏幕元素布局的布局(注意这是 MainActivity 屏幕,我在其中有一个用于所有其他片段的片段主机):
+-------------+-------------+
| | Toolbar |
| |-------------+
| | Banner |
| |-------------+
| Nav Drawer | |
| | |
| | Fragment |
| | |
| | |
+-------------+-------------+
欢迎任何指导如何实现此功能的线索。
我是这样用 LoopingViewPager 做的。
第 1 步:在您的应用中添加依赖项gradle
implementation 'com.asksira.android:loopingviewpager:1.1.2'
第 2 步:在 activity/fragment
中添加以下代码
val sliderAdapter = SliderAdapter(this, arrayListOf("Your Text here","Your Text here","Your Text here"))
val viewPager=findViewById<LoopingViewPager>(R.id.viewPager)
viewPager.adapter = sliderAdapter
第 3 步:在 Activity/Fragment 布局中添加 LoopingViewPager 视图
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<com.asksira.loopingviewpager.LoopingViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="160dp"
android:clickable="true"
app:autoScroll="true"
app:isInfinite="true"
app:scrollInterval="3000"
app:wrap_content="true" />
</LinearLayout>
第 4 步:为 LoopingViewPager 创建适配器
class SliderAdapter(context: Context, val itemList2: ArrayList<String>) :
LoopingPagerAdapter<String>(context, itemList2, true) {
override fun inflateView(viewType: Int, container: ViewGroup?, listPosition: Int): View {
return LayoutInflater.from(context).inflate(R.layout.slider_layout, container, false)
}
override fun bindView(convertView: View?, listPosition: Int, viewType: Int) {
var a = itemList2.get(listPosition)
convertView?.findViewById<TextView>(R.id.textView)?.text=a
}
}
第 5 步:为项目创建布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
我目前正在尝试实现一个类似横幅的视图,其中给定一个字符串列表,该视图将一个接一个地循环显示每个字符串,并在它们到达屏幕中央时暂停。我想做的一个例子如下
在HTML中,这个元素是来自swiperjs的swiper slide,然而,Android没有原生元素可以简单地做到这一点。
我已经在线查看了几天,使用自定义 RecyclerView 测试各种实现,带有选取框的简单 TextView(没有我想要添加的暂停)并且发现大多数“解决方案" 围绕 RecyclerView、ListView 或 ViewPager,通常使用 TimerTask 来处理滚动计时。
遗憾的是,我没有找到任何有效的实现,也没有找到关于哪个视图最适合使用的指示。
所有解决方案都实现了一个图像和一个点选择器,用于显示列表中的哪个图像显示在屏幕上,但我完全不想拥有图像,我只想要一个具有相同功能的 TextView。在任何人问之前,是的,我曾尝试用 TextView 简单地替换图像,但它根本不起作用。
需要注意的一个重要方面是,因为我只是试图让一些文本滚动到视图中,所以我认为 ViewPager 不是一个有效的解决方案,因为我根本没有实现一些滚动片段。这是屏幕元素布局的布局(注意这是 MainActivity 屏幕,我在其中有一个用于所有其他片段的片段主机):
+-------------+-------------+
| | Toolbar |
| |-------------+
| | Banner |
| |-------------+
| Nav Drawer | |
| | |
| | Fragment |
| | |
| | |
+-------------+-------------+
欢迎任何指导如何实现此功能的线索。
我是这样用 LoopingViewPager 做的。
第 1 步:在您的应用中添加依赖项gradle
implementation 'com.asksira.android:loopingviewpager:1.1.2'
第 2 步:在 activity/fragment
中添加以下代码 val sliderAdapter = SliderAdapter(this, arrayListOf("Your Text here","Your Text here","Your Text here"))
val viewPager=findViewById<LoopingViewPager>(R.id.viewPager)
viewPager.adapter = sliderAdapter
第 3 步:在 Activity/Fragment 布局中添加 LoopingViewPager 视图
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<com.asksira.loopingviewpager.LoopingViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="160dp"
android:clickable="true"
app:autoScroll="true"
app:isInfinite="true"
app:scrollInterval="3000"
app:wrap_content="true" />
</LinearLayout>
第 4 步:为 LoopingViewPager 创建适配器
class SliderAdapter(context: Context, val itemList2: ArrayList<String>) :
LoopingPagerAdapter<String>(context, itemList2, true) {
override fun inflateView(viewType: Int, container: ViewGroup?, listPosition: Int): View {
return LayoutInflater.from(context).inflate(R.layout.slider_layout, container, false)
}
override fun bindView(convertView: View?, listPosition: Int, viewType: Int) {
var a = itemList2.get(listPosition)
convertView?.findViewById<TextView>(R.id.textView)?.text=a
}
}
第 5 步:为项目创建布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>