android viewPager 实现图片无限循环滑动并带有进度的自定义布局
来源:互联网 发布:网络电视同步 编辑:程序博客网 时间:2024/05/20 18:54
ViewPager是安卓一款强大的控件,它实现了图片,fragment等的滑动轮播,在这里我们实现了利用ViewPager实现图片无限循环并且上部带有图片轮播进度的效果,代码如下:
首先MainActivity.java
public class MainActivity extends Activity { MyViewPager vpp; private int[]images = new int[]{R.mipmap.img1, R.mipmap.img2, R.mipmap.img3}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); vpp=(MyViewPager)findViewById(R.id.vpp); vpp.startScroll(images); }}
MainActivity 的布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.gcp.myviewpager.MyViewPager android:id="@+id/vpp" android:layout_width="match_parent" android:layout_height="match_parent" ></com.gcp.myviewpager.MyViewPager></LinearLayout>
自定义MyViewPager —-MyViewPager.java
public class MyViewPager extends LinearLayout{ private ViewPager topVp; private RadioGroup rb_g; private List<ImageView> imageViews ; Context context; public MyViewPager(Context context, AttributeSet attrs) { super(context,attrs); this.context=context; View rootView= LayoutInflater.from(context).inflate(R.layout.my_view_pager,this); topVp = (ViewPager)rootView. findViewById(R.id.vp_main); rb_g=(RadioGroup)rootView. findViewById(R.id.rb_g); } public void startScroll(int[]images){ this.imageViews = new ArrayList<>(); for(int i = 0;i<images.length;i++){ ImageView imageView = new ImageView(context); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setImageResource(images[i]); imageViews.add(imageView); } topVp.setAdapter(new PagerAdapter() { @Override public int getCount() { return 10000; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { } @Override public Object instantiateItem(ViewGroup container, int position) { try { container.addView(imageViews.get(position%imageViews.size())); }catch (Exception e){ } return imageViews.get(position%imageViews.size()); } }); topVp.setCurrentItem((10000/2/imageViews.size())*imageViews.size()); initLine(); changeLine((10000/2/imageViews.size())*imageViews.size()%3); topVp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { changeLine(position%imageViews.size()); } @Override public void onPageScrollStateChanged(int state) { } }); } public void initLine(){ RadioGroup.LayoutParams params=new RadioGroup.LayoutParams(0, RadioGroup.LayoutParams.MATCH_PARENT); params.weight=1; for(int i=0;i<imageViews.size();i++){ RadioButton radioButton=new RadioButton(context); radioButton.setLayoutParams(params); radioButton.setButtonDrawable(null); radioButton.setBackgroundResource(R.drawable.rb_back); radioButton.setEnabled(false); rb_g.addView(radioButton,i); } } public void changeLine(int position){ ((RadioButton)(rb_g.getChildAt(position))).setChecked(true); }}
my_view_pager.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RadioGroup android:id="@+id/rb_g" android:layout_width="match_parent" android:layout_height="10dp" android:orientation="horizontal"></RadioGroup> <android.support.v4.view.ViewPager android:id="@+id/vp_main" android:layout_width="wrap_content" android:layout_height="wrap_content" android:flipInterval="0" ></android.support.v4.view.ViewPager></LinearLayout>
rb_back.xml
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@drawable/select_back"> </item> <item android:state_checked="false" android:drawable="@drawable/select_no_back"> </item></selector>
select_back.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#FFfbc400"/></shape>
select_no_back.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#FFF7F7F7"/></shape>
代码下载
阅读全文
1 0
- android viewPager 实现图片无限循环滑动并带有进度的自定义布局
- Android ViewPager 实现无限循环滑动
- Android ViewPager实现无限循环滑动
- android 自定义Viewpager实现无限循环
- Android ViewPager 无限循环左右滑动(可自动) 实现
- Android ViewPager无限循环实现底部小圆点动态滑动
- ViewPager实现真正的左右无限循环滑动
- android之滑动悬浮tab&无限循环的viewPager
- ViewPager实现左右无限循环滑动
- Android——ViewPager无限循环滑动
- android 实现无限循环viewpager
- Android之ViewPager实现图片无限循环轮播
- ImageSwitcher左右无限循环滑动并带有圆点
- ViewPager实现图片的自动轮播和无限循环
- 自定义循环滑动的viewpager
- android 自定义Viewpager 实现静止滑动,并去掉默认的滑动效果
- Android 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片
- vs字体和颜色
- 两直线夹角求解-Python编程实现
- 安装Hexo
- 五步实现网站搬家更换域名及全站301重定向方法
- 【Java并发编程】Process进程 和 Thread线程
- android viewPager 实现图片无限循环滑动并带有进度的自定义布局
- Caffe学习:命令行解析
- NPM 命令大全
- jQuery——get和post方法简述
- 第二行代码复习笔记之Activity的相关用法
- DAY 23 内置函数 递归调用
- Nginx配置性能优化
- html表格内容超出时隐藏和换行
- 在oracle下触发器实现主键自增