package com.example.view;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.activity.R;
import com.example.pojo.BannerBean;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
/**
* 自定义无限轮播view
* @author 少年维特
* @version 1.0
* @date 2018/7/7 9:38
*/
public class CustomBanner extends FrameLayout {
private List<BannerBean.DataBean> list;
private ViewPager viewPager;
private final int CODE_LUNBO = 0;
private int time = 3;//初始化轮播时间
private TextView tv_title;
private TextView tv_pager;
private ArrayList<ImageView> pointList;
private LinearLayout point_layout;
private OnBannerClickListner bannerClickListner;
/**
*Handler:无限轮播
*/
public Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == CODE_LUNBO){
//下一页
viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
//再次发送延时消息
handler.sendEmptyMessageDelayed(CODE_LUNBO,time*1000);
}
}
};
public CustomBanner(@NonNull Context context) {
super(context);
init();
}
public CustomBanner(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public CustomBanner(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public CustomBanner(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
//对外提供设置延时时间的方法
public void setTimeSeconds(int time){
this.time = time;
}
//初始化方法:加载布局
private void init() {
View view = View.inflate(getContext(), R.layout.lunbo_layout,this);
viewPager = view.findViewById(R.id.lunbo_view_page);
tv_title = view.findViewById(R.id.lunbo_tv_title);
tv_pager = view.findViewById(R.id.lunbo_pager);
point_layout = view.findViewById(R.id.point_layout);
}
//对外提供设置数据的方法
public void setListData(List<BannerBean.DataBean> list){
this.list = list;
if (list==null){
return;
}
//创建小圆点集合
initPoint(list.size());
MyAadpter adapter = new MyAadpter(getContext(),list,pointList,tv_title,tv_pager,handler);
//MyAadpter adapter = new MyAadpter(getContext(),list,tv_title,tv_pager,handler);
viewPager.setAdapter(adapter);
//初始化第一张轮播图
viewPager.setCurrentItem(list.size() * 100000);
handler.sendEmptyMessageDelayed(CODE_LUNBO,time*1000);
}
private void initPoint(int size) {
//1PointList
pointList = new ArrayList<ImageView>();
//2...linearLayout上面的视图清空一下再去添加
//point_layout.removeAllViews();
for (int i = 0; i <size ; i++) {
ImageView point = new ImageView(getContext());
if (i==0){
point.setImageResource(R.drawable.shpae01);
}else {
point.setImageResource(R.drawable.shpae02);
}
pointList.add(point);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(40,40);
params.setMargins(5,0,5,0);
point_layout.addView(point,params);
}
}
//Adapter适配器
class MyAadpter extends PagerAdapter{
Context context;
List<BannerBean.DataBean> list;
List<ImageView> PointList;
TextView title;
TextView pager;
private Handler handler;
private ImageView img;
int time1 = 3;
public MyAadpter(Context context, List<BannerBean.DataBean> list, List<ImageView> PointList, TextView title, TextView pager, Handler handler) {
this.context = context;
this.list = list;
this.title = title;
this.PointList = PointList;
this.pager = pager;
this.handler = handler;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
public Object instantiateItem(ViewGroup container, final int position) {
//1.把这个当前展示的视图添加到容器中...container
Log.i("sss","ssss");
img = new ImageView(context);
img.setScaleType(ImageView.ScaleType.FIT_XY);
Picasso.get().load(list.get(position%list.size()).getIcon()).into(img);
//给imageView设置触摸的监听事件
img.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int action = motionEvent.getAction();//获取手指的动作
switch (action) {
case MotionEvent.ACTION_DOWN://按下的动作...应该取消发送消息的操作
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_MOVE://移动的动作
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_CANCEL://取消
//重新发送
handler.sendEmptyMessageDelayed(0, time * 1000);
break;
case MotionEvent.ACTION_UP://抬起的动作
handler.sendEmptyMessageDelayed(0, time * 1000);
break;
}
return false;
}
});
img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
bannerClickListner.onBannerClick(position%list.size());
}
});
container.addView(img);//添加到容器
//2.把当前展示的视图返回
return img;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
Log.i("sss","ssss");
container.removeView((View)object);
}
@Override
public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
super.setPrimaryItem(container, position, object);
title.setText(list.get(position%list.size()).getTitle());
pager.setText(position%list.size()+1+"/"+list.size());
for (int i = 0; i <list.size(); i++) {
if (i==position%list.size()){
PointList.get(i).setImageResource(R.drawable.shpae01);
}else {
PointList.get(i).setImageResource(R.drawable.shpae02);
}
}
}
}
public void setOnBannerClickListner(OnBannerClickListner bannerClickListner){
this.bannerClickListner = bannerClickListner;
}
/**
* 点击的接口
*/
public interface OnBannerClickListner {
void onBannerClick(int position);
}
}