您的位置:首页 > 其它

ViewPager实现图片轮播_简单版

2015-01-13 10:23 405 查看
非原创,仅为个人学习笔记。

自动轮播的时候有循环播放,手动不能从最后一页滑到第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;
	}
}


截图:

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