Android图片轮播的实现总结
2016-03-14 17:52
495 查看
前言:
在很多app中,我们都可以看到几张图片每隔一段时间就切换一下,这就是我们所称的图片轮播的功能,其主要实现就是用到了ViewPager,下面我们来着重讲解一下其具体实现
效果图:
步骤一:在XML中添加ViewPager控件
比如:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.testcarousel.MainActivity"> <android.support.v4.view.ViewPager android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/vp" android:layout_centerInParent="true" > </android.support.v4.view.ViewPager> </RelativeLayout>
步骤二:设置ViewPager的适配器
/** *设置viewPager的适配器 * **/ viewPager.setAdapter(new PagerAdapter() { /*** * 返回可用条目的个数 * @return */ @Override public int getCount() { /** * 这里设置为了整型的最大值, * 主要是为了能够重复进行轮播 */ return Integer.MAX_VALUE; } /** * 判断view和object这个key是否是绑定在一起的 * @param view * @param object * @return */ @Override public boolean isViewFromObject(View view, Object object) { return view==object; } /** * 注意:每次实例化条目时,记得在instantiateItem()方法里边去进行实例化, * 而不要在外边将映射的view添加到list列表中,然后再通过list列表中的view在 * instantiateItem()方法去赋值,这样会出现如下错误: * The specified child already has a parent. * You must call removeView() on the child's parent first * * 可供参考的博客:http://blog.csdn.net/mcy478643968/article/details/26812225 * * 至于其原因,到时需要去研读一下源码咯... * * 添加条目 * @param container * @param position * @return */ @Override public Object instantiateItem(ViewGroup container, int position) { View view = View.inflate(MainActivity.this,R.layout.carousel_page_layout,null); ImageView imageView = (ImageView) view.findViewById(R.id.iv_carousel_page); imageView.setImageResource(lis_drawable.get(position%lis_drawable.size())); container.addView(view); return view; } /** * 移除条目 * @param container * @param position * @param object */ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } });
步骤三:实现自动循环轮播
/** * 通过线程来达到每隔3s进行消息的发送 */ new Thread(){ @Override public void run() { while (isLooper){ /*** * 每300ms切换一次 */ SystemClock.sleep(3000); handler.sendEmptyMessage(0); } } }.start();
/** * 用于使ViewPager循环轮播 */ private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); } };
图片轮播示例源码
相关文章推荐
- scrollview中RelativeLayout问题
- 【Android进阶学习】shape和selector的结合使用
- android studio1.01中导入library
- Android 6.0 反射 newInstance
- Android实现图片(拍照+相册)上传功能
- android px、dp、sp之间的换算公式
- Android中dip、dp、sp、pt和px的区别
- Android四大组件启动顺序、生命周期详解
- 根据Android 传感器控制3D模型方向
- Android Studio 插件 —— GsonFormat
- Android设计模式系列(12)--SDK源码之生成器模式(建造者模式)
- Android Fresco 图片框架加载图片解决不能warp_content得问题
- 采用MQTT协议实现Android消息推送
- 用Kotlin写响应式编程RxAndroid
- Android系统Intent中的Uri使用
- Android中糟糕的AsyncTask
- Android设计模式系列(11)--SDK源码之策略模式
- android:layout_weight的真实含义
- Android开发者入门必知了解谷歌官方Android开发文档
- Android 之Hierarchy Tool Window