OverView
今天在学习的过沉中尝试让ViewPager实现自动滚动,这个我之前写过,写划过博客,但是,我今天去使用它,发现我写的那个有带你无法满足我,所以我就直接使用了阿里开源的UltraViewPager,这玩意功能强大。
接下来让我们看一下如何使用它吧。
开发环境
Android Studio 3.5.3
启用 AndroidX
开发语言 JAVA
添加框架依赖
我们在APP的build.gradle添加
implementation ('com.alibaba.android:ultraviewpager:1.0.7.8'){
transitive = true
}
然后点击同步,这样我们的依赖就添加完成了!
看看如何使用它
按照国际惯例先看源代码:(布局文件)
android:id="@+id/my_UltraViewPager"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_centerInParent="true"
android:layout_marginTop="10dp"
android:background="@color/white"
app:layout_constraintTop_toBottomOf="@+id/linearLayout3"
tools:layout_editor_absoluteX="5dp" />
这样我们的布局文件就创建完成了。
然后我们来看一下适配器:
package com.example.testandroid.Adpaters;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import java.util.ArrayList;
import java.util.List;
public class UltraPagerAdapter extends PagerAdapter {
private List listViews = new ArrayList<>();
public UltraPagerAdapter(List listViews) {
this.listViews = listViews;
}
@Override
public int getCount() {
return listViews.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(listViews.get(position));
return listViews.get(position);
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(listViews.get(position));
}
}
这些就是适配器了。接着我们根据适配器源码来看一下。
我们的适配器继承了我们的PagerAdpter
然后我们创建了一个List 然后创建了我们的构造方法。
接下来的步骤和我们普通的PagerAdpater的方法是一样的。
这些都是比较简单的,然后让我么了看一下核心代码是啥样的。
核心代码区域
//init pagerView
View view1 = View.inflate(getApplicationContext(), R.layout.keep_my_view_pager1, null);
Typeface typeface1 = ResourcesCompat.getFont(this, R.font.texgyreadventor_bolditalic);
((TextView) view1.findViewById(R.id.view_title)).setTypeface(typeface1);
listView.add(view1);
View view2 = View.inflate(getApplicationContext(), R.layout.keep_my_view_pager2, null);
((TextView) view2.findViewById(R.id.view_title)).setTypeface(typeface1);
listView.add(view2);
ultraViewPager = findViewById(R.id.my_UltraViewPager);
ultraViewPager.setScrollMode(UltraViewPager.ScrollMode.HORIZONTAL);
PagerAdapter adapter = new UltraPagerAdapter( listView);
ultraViewPager.setAdapter(adapter);
ultraViewPager.initIndicator();
ultraViewPager.getIndicator().setOrientation(UltraViewPager.Orientation.HORIZONTAL)
.setFocusColor(Color.GREEN)
.setNormalColor(Color.WHITE)
.setRadius((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 3, getResources().getDisplayMetrics()));
ultraViewPager.getIndicator().setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
ultraViewPager.getIndicator().build();
ultraViewPager.setInfiniteLoop(true);
ultraViewPager.setAutoScroll(2000);
这部分就是我们的UltraViewPager的核心区域了。
我们来好好的看一下:
首先我创建了两个View填充我们的控件。
然后我们实例化我们的控件,并且确定我们滚动提示图标的位置。
然后我们实例化我们的适配器,并且将他和控件绑定。
接着我们需要编写我们的initIndicator();这边又啥用了?
他就是显示我们的滚动提示圈的,
这里又几个属性需要注意一下,未选中的颜色,选中的颜色,和我们的大小。
这些创建完成后我们需要去固定小圈圈的位置。
然后就是是否开启我们的自动滚动,以及间隔时间。