这两天做个android项目,跳了个大坑,至今仍未脱坑,先把代码上了吧,viewPager实现简单的无限轮播效果
MainActivity.xml布局文件内容:
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="320dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true" />
MainActivity的代码实现如下:
public class MainActivity extends Activity { private ViewPager viewPager; //我们的轮播是要应用在项目中的,而且要一直在运行,所以要异步执行 private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager=(ViewPager) findViewById(R.id.viewPager); //将实现轮播的内容封装在此方法中 initView(); } 实现轮播的方法: private void initView(){ final int[] resIds;//ViewPager中显示的广告图片 //暂时只是测试,所以就给特定的5张图片,在resIds[0]上放最后一张图片,resIds[6]放第一张图片 resIds = new int[]{R.drawable.lunbo_05,R.drawable.lunbo_01,R.drawable.lunbo_02,R.drawable.lunbo_03, R.drawable.lunbo_04,R.drawable.lunbo_05,R.drawable.lunbo_01}; final PagerAdapter pagerAdpater = new PagerAdapter(){ @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 =arg1; } @Override public int getCount() { return resIds.length; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView iv = new ImageView(getApplication()); //图片大小跟随ImageView的尺寸来改变 iv.setScaleType(ScaleType.FIT_XY); iv.setImageResource(resIds[position]); container.addView(iv); return iv; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View)object); } };
viewPager.setAdapter(pagerAdpater); viewPager.setCurrentItem(1);//设置viewPager的起始显示 viewPager.setOnPageChangeListener(new OnPageChangeListener() { //此方法是页面跳转完后得到调用,arg0是你当前选中的页面的Position @Overridepublic void onPageSelected(int arg0) { if(arg0 = = resIds.length-1){//当切换到最后一张图片时,就跳回第一张图片 viewPager.setCurrentItem(1,false); }//第二个参数设置为false,取消跳转的速度,不然从最后缓慢跳转到最前,超级难看 } @Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Overridepublic void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub}});startAnim(); } private void startAnim() { //设置异步执行动画的轮播 handler.postDelayed(new Runnable() { @Overridepublic void run() { int pos = viewPager.getCurrentItem(); viewPager.setCurrentItem(pos+1); handler.postDelayed(this, 3000); } }, 3000);} protected void stopAnim() { handler.removeCallbacksAndMessages(null); }
轮播效果是实现了,可是有个大坑,不知各位看官发现了没有。
我是在运行起来后才发现,当第一遍播放OK后,很突兀的就跳转到了第一张图,是跳转,根本不是我们所需要的缓慢过渡,就如同viewPager的滑动效果一样,从右往左 滑出。。。。。
坑啊坑,只能以后成长了再回来填坑了。。。。。