ViewPager是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换
今天要讲的是用ViewPager实现图片的自动轮播,也可以用此控件加载页面,我前面有写过此案例,感兴趣的人可以去看看。好了,开始今天的学习;
Activity中
package com.example.viewpager; //导包 import android.app.Activity; import android.app.ListActivity; import android.os.Handler; import android.os.Message; import android.support.v4.view.ViewPager; import android.os.Bundle; import android.widget.RadioGroup; import java.util.ArrayList; import java.util.List; //类 public class MainActivity extends Activity { ViewPager viewPager; int i = 0; //主线程更改UI Handler h = new Handler(){ @Override public void handleMessage(Message msg) { //接受发过来的消息,改变数据位置 if(msg.what==0){ i = viewPager.getCurrentItem(); viewPager.setCurrentItem(i+1); } } }; private List<Integer> list; private RadioGroup radio; private Myadper myadper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //加载布局 setContentView(R.layout.activity_main); //获取资源id radio = (RadioGroup) findViewById(R.id.radio); viewPager = (ViewPager) findViewById(R.id.viewpager); //定义一个集合,把数据放入集合 list = new ArrayList<Integer>(); //图片放入res文件下的mipmap-xxx下 list.add(R.mipmap.a1); list.add(R.mipmap.a2); list.add(R.mipmap.a3); list.add(R.mipmap.a4); //适配器,适配数据 myadper = new Myadper(list,this); viewPager.setAdapter(myadper); //图片自动轮播跟着的小圆点的设置 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { switch (position% list.size()){ case 0: radio.check(R.id.b1); break; case 1: radio.check(R.id.b2); break; case 2: radio.check(R.id.b3); break; case 3: radio.check(R.id.b4); break; } } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); //定义个子线程,两秒发送消息,主线程去更改UI new Thread(){ @Override public void run() { try { while(true){ sleep(2000); h.sendEmptyMessage(0); } } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); } }
适配器
package com.example.viewpager; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView import java.util.List; //类继承PagerAdapter,实现四个方法 public class Myadper extends PagerAdapter{ //通过构造器传递数据 List<Integer> list; Context context; public Myadper(List<Integer> list, Context context) { this.list = list; this.context = context; } //返回一个最大值 @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } //创建 @Override public Object instantiateItem(ViewGroup container, int position) { ImageView image = new ImageView(context); image.setImageResource(list.get(position%list.size())); image.setScaleType(ImageView.ScaleType.FIT_XY); container.addView(image); return image; } //销毁 @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }
XML文件
<?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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.viewpager.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_height="match_parent" android:layout_width="match_parent" /> <RadioGroup android:id="@+id/radio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:orientation="horizontal"> <RadioButton android:id="@+id/b1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/b2" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/b3" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/b4" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RadioGroup> </RelativeLayout>
实现的案例效果