非原创,仅为个人学习笔记。
自动轮播的时候有循环播放,手动不能从最后一页滑到第0页。
代码一: activity_main.xml
<LinearLayout 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="${relativePackage}.${activityClass}"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="270dp"
/>
<LinearLayout
android:id="@+id/dotLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >
</LinearLayout>
</LinearLayout>
代码二:
public class MainActivity extends Activity {
private ViewPager viewPager;
private ViewPagerAdapter adapter;
private LinearLayout dotLayout;
private ImageView dot;
private ImageView dots[];
private Runnable runnable;
private int autoChangeTime=2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViewPager();
initDot();
initRunnable();
}
private void initViewPager(){
adapter=new ViewPagerAdapter(this);
adapter.change(getList());//直接作为构造参数传入也可
viewPager=(ViewPager)findViewById(R.id.viewPager);
viewPager.setAdapter(adapter);
viewPager.setOnPageChangeListener(pageChangeListener);
}
OnPageChangeListener pageChangeListener=new OnPageChangeListener(){
@Override
public void onPageScrollStateChanged(int arg0) {
Log.v("zz","zz-->>onPageScrollStateChanged="+arg0);
//arg0 表示滑动状态:1正在滑动;2滑动完毕;3没有滑动,展示状态;
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
Log.v("zz","zz-->>onPageScrolled-->>arg0="+arg0+"---arg1="+arg1
+"---arg2="+arg2);
//滑动过程调用:从第arg0滑动;arg1滑动完成百分比;arg2滑动了多少距离;
viewHandler.removeCallbacks(runnable);
//removeCallbacks清空队列中的Runnable,防止手动滑动和定时滑动冲突
viewHandler.postDelayed(runnable, autoChangeTime);
}
@Override
public void onPageSelected(int arg0) {
Log.v("zz","zz-->>onPageSelected="+arg0);
//滑动完成后调用:现在展示的是第arg0页
setCurDot(arg0);
}
};
private List<Integer> getList() {
List<Integer> list = new ArrayList<Integer>();
list.add(R.drawable.nba1);
list.add(R.drawable.nba2);
list.add(R.drawable.nba3);
list.add(R.drawable.nba4);
return list;
}
private void initDot() {
dotLayout=(LinearLayout)findViewById(R.id.dotLayout);
LayoutParams lp=new LayoutParams(40,40);
dots=new ImageView[adapter.getCount()];
for(int i=0;i<adapter.getCount();i++){
dot=new ImageView(this);
dot.setLayoutParams(lp);
dots[i]=dot;
dots[i].setTag(i);
dots[i].setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
int position=(Integer)v.getTag();
setCurView(position);
}
});
if(i==0){
dots[i].setBackgroundResource(R.drawable.dot_focus);
}else{
dots[i].setBackgroundResource(R.drawable.dot_normal);
}
dotLayout.addView(dots[i]);
}
}
//高亮dotLayout中对应的ViewPager页面
private void setCurDot(int position){
for(int i=0;i<dots.length;i++){
if(position==i){
dots[i].setBackgroundResource(R.drawable.dot_focus);
}else{
dots[i].setBackgroundResource(R.drawable.dot_normal);
}
}
}
//切换ViewPager页面
private void setCurView(int position){
if(position<0||position>adapter.getCount()){
return;
}
viewPager.setCurrentItem(position);
}
Handler viewHandler=new Handler(){
public void handleMessage(android.os.Message msg) {
setCurView(msg.what);
};
};
private void initRunnable() {
runnable =new Runnable(){
@Override
public void run() {
int next=viewPager.getCurrentItem()+1;
if(next>=adapter.getCount()){
next=0;//自动轮播,循环播放
}
viewHandler.sendEmptyMessage(next);
//sendEmptyMessage作用:send a msg containing only the what value
}
};
viewHandler.postDelayed(runnable,autoChangeTime);
}
}
代码三:
public class ViewPagerAdapter extends PagerAdapter {
private Context context;
private List<Integer> paths;
public ViewPagerAdapter(Context ctx){
context=ctx;
}
public void change(List<Integer> paths){
this.paths=paths;
}
@Override
public int getCount() {
return paths.size();
}
@Override
public boolean isViewFromObject(View view, Object obj) {
return view==(View)obj;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeViewInLayout((View)object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imgView=new ImageView(context);
Drawable drawable=context.getResources().getDrawable(paths.get(position));
imgView.setImageDrawable(drawable);
((ViewPager)container).addView(imgView);
//instantiateItem新增Item用的。
return imgView;
}
}
截图: