//自定义类
public class CustomBanner extends FrameLayout{ private ViewPager viewPager; private LinearLayout linearLayout; private List<String> list; private int time=2; private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { if(msg.what==0){ int currentItem = viewPager.getCurrentItem(); viewPager.setCurrentItem(currentItem+1); sendEmptyMessageDelayed(0,time*1000); } } }; private List<ImageView> listDoc; private OnClickLisner onClickLisner; 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, @AttrRes int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { View view= View.inflate(getContext(), R.layout.banner,this); viewPager = view.findViewById(R.id.viewPager); linearLayout = view.findViewById(R.id.lin); } public void setImageUrls(List<String> list){ this.list = list; if (list == null){ return; } //设置适配器 LunBoAdapter lunBoAdapter = new LunBoAdapter(getContext(), list); viewPager.setAdapter(lunBoAdapter); initDoc(); //显示中间某个位置 viewPager.setCurrentItem(list.size()*10000); //使用handler自动轮播 handler.sendEmptyMessageDelayed(0,time*1000); //状态改变的监听事件 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { //在选中某一页的时候,切换小圆点的背景 for (int i = 0;i<listDoc.size();i++){ if (position%listDoc.size() == i){ listDoc.get(i).setBackgroundResource(R.drawable.shape_01); }else { listDoc.get(i).setBackgroundResource(R.drawable.shape_02); } } } @Override public void onPageScrollStateChanged(int state) { } }); } private void initDoc() { //创建一个集合,记录这些小圆点 listDoc = new ArrayList<>(); //清空布局 linearLayout.removeAllViews(); for (int i=0;i<list.size();i++){ ImageView docImage = new ImageView(getContext()); if (i == 0){ docImage.setBackgroundResource(R.drawable.shape_01); }else { docImage.setBackgroundResource(R.drawable.shape_02); } //添加到集合 listDoc.add(docImage); //添加到线性布局 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins(5,0,5,0); linearLayout.addView(docImage,params); } } /** * 对外提供轮播的时间 */ public void setTimeSecond(int time){ this.time = time; } public void setClickListner(OnClickLisner onClickLisner) { this.onClickLisner = onClickLisner; } private class LunBoAdapter extends PagerAdapter { private List<String> list; private Context context; public LunBoAdapter(Context context, List<String> list) { this.context = context; this.list = list; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, final int position) { //创建imageView ImageView imageView = new ImageView(context); imageView.setScaleType(ImageView.ScaleType.FIT_XY); //加载这张图片 Glide.with(context).load(list.get(position%list.size())).into(imageView); //点击事件 imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { //触发 onClickLisner.onItemClick(position%list.size()); } }); //触摸事件 imageView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: //取消handler身上的消息和回调 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; } }); //添加到容器 container.addView(imageView); //返回 return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } public interface OnClickLisner{ void onItemClick(int position); } }
/ok
//main
public class MainActivity extends AppCompatActivity { private CustomBanner ban; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ban = (CustomBanner) findViewById(R.id.ban); //请求数据进行解析展示 getDataFromNet(); } private void getDataFromNet() { OkHttp3Util.doGet("https://www.zhaoapi.cn/ad/getAd", new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String json = response.body().string(); final Bean detalBean = new Gson().fromJson(json, Bean.class); final List<String> list = new ArrayList<>(); final List<Bean.DataBean> data = detalBean.getData(); for (int i = 0; i < data.size(); i++) { list.add(data.get(i).getIcon()); } runOnUiThread(new Runnable() { @Override public void run() { //设置时间 ban.setTimeSecond(3); //设置显示轮播 ban.setImageUrls(list); //设置点击事件 ban.setClickListner(new CustomBanner.OnClickLisner() { @Override public void onItemClick(int position) { Bean.DataBean dataBean = data.get(position); if (dataBean.getType() == 0) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra("url", dataBean.getUrl()); startActivity(intent); } else if (dataBean.getType() == 1) { Toast.makeText(MainActivity.this, "我要跳转到商品详情页", Toast.LENGTH_SHORT).show(); } } }); } }); } } }); } }
//second
public class SecondActivity extends AppCompatActivity { private WebView webview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); webview= (WebView) findViewById(R.id.webview); webview.loadUrl("http://img11.360buyimg.com/n0/g14/M05/04/17/rBEhVlHc82sIAAAAAAG6DdBRLOEAAA7OwMHn7IAAbol961.jpg"); } }
//banner.xml
<?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:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/viewPager"></android.support.v4.view.ViewPager> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_centerHorizontal="true" android:layout_alignBottom="@+id/viewPager" android:layout_marginBottom="10dp" android:id="@+id/lin" ></LinearLayout> </RelativeLayout>