直接进入主题
为了方便使用我们先自定义一个View(当然不自定义也行,具体就不说了)
public class Banner extends RelativeLayout
{
private ViewPager viewPager;
private final int UPTATE_VIEWPAGER = 100;
//图片默认时间间隔
private int imgDelyed = 2000;
//每个位置默认时间间隔,因为有视频的原因
private int delyedTime = 2000;
//默认显示位置,为实现无限轮播
private int autoCurrIndex = 1;
//是否自动播放
private boolean isAutoPlay = false;
public Banner(Context context)
{
super(context);
init();
}
public Banner(Context context, AttributeSet attrs)
{
super(context, attrs);
init();
}
public Banner(Context context, AttributeSet attrs, int defStyleAttr)
{
super(context, attrs, defStyleAttr);
init();
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public Banner(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
{
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init()
{
viewPager = new ViewPager(getContext());
LinearLayout.LayoutParams vp_param = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
viewPager.setLayoutParams(vp_param);
this.addView(viewPager);
}
}
很简单,就实现了一些初始化,然后在布局里是这样的
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.test.net.Banner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="200dp"></com.test.net.Banner>
</RelativeLayout>
引用我们自定义的view,viewpage有了,我们可以准备PagerAdapter
public class BannerViewAdapter extends PagerAdapter
{
private List<View> listBean;
public BannerViewAdapter(List<View> list){
if (list == null){
list = new ArrayList<>();
}
this.listBean = list;
}
public void setDataList(List<View> list){
if (list != null && list.size() > 0){
this.listBean = list;
}
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
View view = listBean.get(position);
container.addView(view);
return view;
}
@Override
public int getItemPosition(Object object)
{
return POSITION_NONE;
}
@Override
public int getCount()
{
return listBean.size();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
container.removeView((View) object);
}
@Override
public boolean isViewFromObject(View view, Object object)
{
return view == object;
}
}
没什么特别的,getItemPosition()是切换数据用的,后面有提到,好了我们来看看Activity
public class BannerActivity extends AppCompatActivity
{
private Banner banner;
private List<String> list;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activit