android怎么viewpager实现循环切换图片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android怎么viewpager实现循环切换图片相关的知识,希望对你有一定的参考价值。
android中的ViewPager则实现了左右滑动的效果,ViewPager类提供了多界面切换的新效果。利用ViewPager实现图片循环滚动代码如下:
1、首先是布局文件,使用了一个ViewPager控件:
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_ >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_
android:layout_ >
</android.support.v4.view.ViewPager>
<LinearLayout
android:layout_
android:layout_
android:layout_alignBottom="@id/viewpager"
android:background="#33000000"
android:orientation="vertical"
android:padding="5dip" >
<TextView
android:id="@+id/tv_image_description"
android:layout_
android:layout_
android:layout_gravity="center_horizontal"
android:text="第一个引导页面"
android:textColor="@android:color/white"
android:textSize="14sp" />
<LinearLayout
android:id="@+id/ll_points"
android:layout_
android:layout_
android:layout_marginTop="5dip"
android:layout_gravity="center_horizontal"
android:orientation="horizontal" >
</LinearLayout>
</LinearLayout>
</RelativeLayout></span>
2、接下来实现一个继承PagerAdapter的MyAdapter类,实现一个PagerAdapter,代码如下:
<span style="padding: 0px; margin: 0px; font-size: 14px;">package com.example.viewpagertest;import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
class ViewPagerAdapter extends PagerAdapter
private List<ImageView> mImageViewList;
public ViewPagerAdapter(List<ImageView> imageViewList)
super();
this.mImageViewList = imageViewList;
/**
* 该方法将返回所包含的 Item总个数。为了实现一种循环滚动的效果,返回了基本整型的最大值,这样就会创建很多的Item,
* 其实这并非是真正的无限循环。
*/
@Override
public int getCount()
return Integer.MAX_VALUE;
/**
* 判断出去的view是否等于进来的view 如果为true直接复用
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1)
return arg0 == arg1;
/**
* 销毁预加载以外的view对象, 会把需要销毁的对象的索引位置传进来,就是position,
* 因为mImageViewList只有五条数据,而position将会取到很大的值,
* 所以使用取余数的方法来获取每一条数据项。
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object)
container.removeView(mImageViewList.get(position % mImageViewList.size()));
/**
* 创建一个view,
*/
@Override
public Object instantiateItem(ViewGroup container, int position)
container.addView(mImageViewList.get(position % mImageViewList.size()));
return mImageViewList.get(position % mImageViewList.size());
</span>
3、最后是主界面部分的代码:
<span style="padding: 0px; margin: 0px; font-size: 14px;">package com.example.viewpagertest;import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
public class MainActivity extends Activity implements OnPageChangeListener
private List<ImageView> imageViewList;
private TextView tvDescription;
private LinearLayout llPoints;
private String[] imageDescriptions;
private int previousSelectPosition = 0;
private ViewPager mViewPager;
private boolean isLoop = true;
private Handler handler = new Handler()
@Override
public void handleMessage(Message msg)
super.handleMessage(msg);
mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setView();
initView();
public void setView()
setContentView(R.layout.activity_splash_viewpager);
// 自动切换页面功能
new Thread(new Runnable()
@Override
public void run()
while (isLoop)
SystemClock.sleep(2000);
handler.sendEmptyMessage(0);
).start();
public void initView()
mViewPager = (ViewPager) findViewById(R.id.viewpager);
tvDescription = (TextView) findViewById(R.id.tv_image_description);
llPoints = (LinearLayout) findViewById(R.id.ll_points);
prepareData();
ViewPagerAdapter adapter = new ViewPagerAdapter(imageViewList);
mViewPager.setAdapter(adapter);
mViewPager.setOnPageChangeListener(this);
tvDescription.setText(imageDescriptions[previousSelectPosition]);
llPoints.getChildAt(previousSelectPosition).setEnabled(true);
/**
* 2147483647 / 2 = 1073741820 - 1
* 设置ViewPager的当前项为一个比较大的数,以便一开始就可以左右循环滑动
*/
int n = Integer.MAX_VALUE / 2 % imageViewList.size();
int itemPosition = Integer.MAX_VALUE / 2 - n;
mViewPager.setCurrentItem(itemPosition);
private void prepareData()
imageViewList = new ArrayList<ImageView>();
int[] imageResIDs = getImageResIDs();
imageDescriptions = getImageDescription();
ImageView iv;
View view;
for (int i = 0; i < imageResIDs.length; i++)
iv = new ImageView(this);
iv.setBackgroundResource(imageResIDs[i]);
imageViewList.add(iv);
// 添加点view对象
view = new View(this);
view.setBackgroundDrawable(getResources().getDrawable(R.drawable.point_background));
LayoutParams lp = new LayoutParams(5, 5);
lp.leftMargin = 10;
view.setLayoutParams(lp);
view.setEnabled(false);
llPoints.addView(view);
private int[] getImageResIDs()
return new int[]
R.drawable.bg1,
R.drawable.bg2,
R.drawable.bg3,
R.drawable.pic_01,
R.drawable.pic_02
;
private String[] getImageDescription()
return new String[]
"第一个引导页面",
"第二个引导页面",
"第三个引导页面",
"第四个引导页面",
"第五个引导页面"
;
@Override
public void onPageScrollStateChanged(int arg0)
@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
@Override
public void onPageSelected(int position)
// 改变图片的描述信息
tvDescription.setText(imageDescriptions[position % imageViewList.size()]);
// 切换选中的点,把前一个点置为normal状态
llPoints.getChildAt(previousSelectPosition).setEnabled(false);
// 把当前选中的position对应的点置为enabled状态
llPoints.getChildAt(position % imageViewList.size()).setEnabled(true);
previousSelectPosition = position % imageViewList.size();
@Override
protected void onDestroy()
super.onDestroy();
isLoop = false;
</span> 参考技术A ViewPager是android-support-v4.jar包中的一个系统控件,继承自ViewGroup,专门用以实现左右滑动切换View的效果,使用时需要首先在Project->properties->Java Build Path->Libraries->Add External Jars中加入sdk目录下的extras/android/support/v4/android-support-v4.jar(如果找不到,则需要用sdk manager下载android support package)。加入这个jar包之后就可以使用ViewPager类了。本回答被提问者和网友采纳
以上是关于android怎么viewpager实现循环切换图片的主要内容,如果未能解决你的问题,请参考以下文章
Android:使用ViewPager实现左右滑动切换图片加点点