您的位置:首页 > 移动开发 > Android开发

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);
}
};


图片轮播示例源码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: