ViewPager无限轮播中,点击或触摸轮播图停止轮播,XListView添加头部
2017-08-25 10:43
423 查看
package com.example.lunbodot; import android.os.Handler; import android.os.Message; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; import java.util.List; import view.xlistview.XListView; public class MainActivity extends AppCompatActivity { private String url1 = "http://img5.imgtn.bdimg.com/it/u=3629051820,2764725225&fm=26&gp=0.jpg"; private String url2 = "http://img2.imgtn.bdimg.com/it/u=3812208990,560486562&fm=26&gp=0.jpg"; private String url3 = "http://img3.imgtn.bdimg.com/it/u=3370075549,3816287382&fm=26&gp=0.jpg"; private String url4 = "http://img4.imgtn.bdimg.com/it/u=2803176387,402242983&fm=26&gp=0.jpg"; private ViewPager vp; private List<String> list = new ArrayList<>(); private List<String> list2 = new ArrayList<>(); private int curr; private LinearLayout ll; private XListView xlv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initview(); addlist(); initDot(); vp.setAdapter(new MyAdapter()); vp.setCurrentItem(1); vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if(position == 0){ curr = 4; }else if(position == 5){ curr = 1; }else{ curr = position; } for (int i = 0; i < ll.getChildCount(); i++) { //获取孩子 ImageView child = (ImageView) ll.getChildAt(i); if(i == curr-1){ child.setImageResource(R.drawable.select); }else{ child.setImageResource(R.drawable.normal); } } } @Override public void onPageScrollStateChanged(int state) { if(state == vp.SCROLL_STATE_IDLE){ vp.setCurrentItem(curr,false); } } }); h.postDelayed(ru,1000); //XListView适配器 xlv.setAdapter(new BaseAdapter() { @Override public int getCount() { return list2.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { if(view == null){ view = View.inflate(MainActivity.this, R.layout.listview_item, null); } TextView tv = view.findViewById(R.id.tv_msg); tv.setText(list2.get(i)); return view; } }); } //添加小圆点 private void initDot() { for (int i = 0; i < 4; i++) { ImageView iv = new ImageView(this); if(i == 0){ iv.setImageResource(R.drawable.select); }else{ iv.setImageResource(R.drawable.normal); } LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30,30); params.setMargins(5,5,5,5); ll.addView(iv,params); } } //添加内容 private void addlist() { //ViewPager图片路径 list.add(url4); list.add(url1); list.add(url2); list.add(url3); list.add(url4); list.add(url1); //XListView展示条目 list2.add("11111111111111111111"); list2.add("22222222222222222222"); list2.add("33333333333333333333"); list2.add("44444444444444444444"); list2.add("55555555555555555555"); list2.add("66666666666666666666"); list2.add("77777777777777777777"); list2.add("88888888888888888888"); } //查找控件 private void initview() { View view = View.inflate(this, R.layout.head_item, null); vp = view.findViewById(R.id.vp_viewpager); ll = view.findViewById(R.id.ll); xlv = (XListView) findViewById(R.id.xlv_listview); xlv.addHeaderView(view); } class MyAdapter extends PagerAdapter{ @Override public int getCount() { return list.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View inflate = View.inflate(MainActivity.this, R.layout.item, null); ImageView iv = inflate.findViewById(R.id.iv_img); ImageLoader.getInstance().displayImage(list.get(position),iv); container.addView(inflate); return inflate; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } //实例化一个Handler对象 Handler h = new Handler(); //要想点击不自动轮滑,必须用Runnable接口实现 Runnable ru = new Runnable() { @Override public void run() { int currentItem = vp.getCurrentItem(); currentItem++; vp.setCurrentItem(currentItem); h.postDelayed(ru,1000); } }; //触摸事件 @Override public boolean dispatchTouchEvent(MotionEvent ev) { int action = ev.getAction(); if(action == MotionEvent.ACTION_DOWN ||action == MotionEvent.ACTION_MOVE){ h.removeCallbacks(ru); }else if(action == MotionEvent.ACTION_UP){ h.postDelayed(ru,1000); } return super.dispatchTouchEvent(ev); } //生命周期 @Override protected void onStop() { super.onStop(); h.removeCallbacks(ru); } }
相关文章推荐
- viewpager+handler获取网络数据无限自动轮播,xlistview添加头部viewpager,点击条目跳转百度
- ViewPager轮播图:自动无限轮播,手指长按停止,实现点击事件(实用版)
- 网络数据请求展示为无限轮播图 ViewPager+XListView+Fragment+ImageLoader
- ViewPager轮播图自动无限循环滑动,手指按住停止滑动
- ViewPager无限轮播加XListview加载
- ViewPager:真正实现图片的无限轮播、自定义指示点和条目点击事件(支持长按暂停滚动)
- 解决Listview通过addHeaderView方式头部添加轮播,轮播失效
- Android开发——利用ViewPager实现显示多个item无限轮播+点击事件监听
- 简单实现viewpager 自动轮播,触摸停止轮播,离开继续轮播
- ViewPager自动轮播,当手触摸时停止自动播放,离开继续播放
- Android使用ViewPager做无限轮播,人为滑动时停止
- Android ViewPager>Fragment>Listview>addHeaderView添加轮播图隐藏bug
- PullToRefreshListView+ViewPager无限轮播
- Android_ListView头部添加ViewPager,
- viewpager自添加指示器,无限轮播
- WebView+ViewPager实现无限轮转,同时与手势兼容,手势触摸时可以停止轮转效果
- ListView嵌套viewpager 头部图片轮换,listview 进行下拉刷新
- RecyclerView 添加头部和尾部,并实现Item的点击事件
- ViewPager无限轮播实现
- Viewpager的无限轮播