废话不多说
自定义Banner的控件视图的XML文件 custombannerlayout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/custom_vp"
android:layout_width="match_parent"
android:layout_height="200dp">
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/custom_ll"
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_alignBottom="@id/custom_vp"
android:gravity="center"
android:orientation="horizontal">
</LinearLayout>
</RelativeLayout>
自定义View类
public class CustomBanner extends RelativeLayout {
private static String TAG = "Banner-----------";
//轮播图片集合 list
private static List<ImageView> list;
//小圆点list
private static List<ImageView> points = new ArrayList<>();
private static ViewPager custom_vp;
private static LinearLayout custom_ll;
private MyHandler myHandler = new MyHandler();
public CustomBanner(Context context) {
this(context,null);
}
public CustomBanner(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CustomBanner(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
View view = View.inflate(context, R.layout.custombannerlayout, this);
/*获取控件*/
custom_vp = view.findViewById(R.id.custom_vp);
custom_ll = view.findViewById(R.id.custom_ll);
}
//设置adapter
public void setAdapter(PagerAdapter pagerAdapter){
custom_vp.setAdapter(pagerAdapter);
//ViewPager状态改变事件
custom_vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
//当页面滑动的时候回调方法
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//当松开的时候回调方法
@Override
public void onPageSelected(int position) {
position = position%points.size();
for (int i=0; i<points.size();i++){
if(position==i){
points.get(position).setSelected(true);
}else{
points.get(i).setSelected(false);
}
}
}
//当状态改变时回调函数
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
//开启自动轮播
public void autoPlay(){
myHandler.sendEmptyMessageDelayed(0,2000);
}
//停止自动轮播
public void stopPlay(){
myHandler.removeCallbacksAndMessages(null);
}
//实现Handmer
public class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int item = custom_vp.getCurrentItem();
item++;
custom_vp.setCurrentItem(item);
autoPlay();
}
}
//创建适配器
public static class Custom_vpPagerAdapter extends PagerAdapter{
private final Context context;
public Custom_vpPagerAdapter(Context context,List<ImageView> list1) {
this.context = context;
list = list1;
Log.d(TAG,"-------------"+list.size());
for(int i=0;i<list.size();i++){
ImageView point = new ImageView(context);
point.setImageResource(R.drawable.custom_selector);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(10,0,10,0);
point.setLayoutParams(params);
points.add(point);
custom_ll.addView(point);
}
points.get(0).setSelected(true);
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean
isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public Object instantiateItem(final ViewGroup container, int position) {
position = position%list.size();
ImageView imageView = list.get(position);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
小圆点选择器 custom_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<!--小圆点选择器-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--选中状态为红色-->
<item android:drawable="@drawable/point_selected" android:state_selected="true"></item>
<!--未选中为灰色-->
<item android:drawable="@drawable/point_normal" android:state_selected="false"></item>
</selector>
未选中状态下的小圆点
point_normal.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#999999"></solid>
<size android:height="1.5dp" android:width="8dp"></size>
</shape>
选中状态下的小圆点 point_selected.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:thickness="1.2dp"
android:useLevel="false">
<solid android:color="#FFFFFF"></solid>
<size android:height="6.5dp" android:width="6.5dp"></size>
</shape>
在调用页面写
public void showBannerToJson(final List<AdBean.DataBean> list) {
images = new ArrayList<>();
for (int i=0;i<list.size();i++){
String icon = list.get(i).getIcon();
final int finalI = i;
ImageView imageView = new ImageView(getActivity());
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), WebViewActivity.class);
intent.putExtra("url",list.get(finalI).getUrl());
getActivity().startActivity(intent);
}
});
Glide.with(getActivity()).load(icon).into(imageView);
images.add(imageView);
}
//实现适配器
CustomBanner.Custom_vpPagerAdapter adapter = new CustomBanner.Custom_vpPagerAdapter(getActivity(),images);
banner.setAdapter(adapter);
//开启轮播
banner.autoPlay();
}