使用ViewPager实现左右循环滑动图片

•android-support-v4.jar,这是谷歌官方 给我们提供的一个兼容低版本Android设备的软件包,里面包囊了只有在Android3.0以上可以使用的api。而ViewPager就是其中之 一,利用它我们可以做很多事情,从最简单的导航,到页面切换菜单等等。
•ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。
下面是大概样图:




这个是非常常见的应用
下面给出实现的代码:
源代码:
<pre name="code" class="java">package com.example.demo;
import android.annotation.TargetApi;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class MainActivity extends ActionBarActivity {
	private ViewPager pager;
	private ImageView[] images;
	private ImageView[] dots;
	private ImageView imageView;
	 private boolean isLoop = true;  
	    private Handler handler = new Handler() {  
	        @Override  
	        public void handleMessage(Message msg) {  
	            super.handleMessage(msg);  
	            pager.setCurrentItem(pager.getCurrentItem() + 1);  
	        }  
	    }; 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//载入图片资源ID
		pager = (ViewPager) findViewById(R.id.adv_pager); 
        ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);
        //这里存放的是四张广告背景 
        images = new ImageView[4]; 
        for (int i = 0; i < 4; i++) {
        	ImageView img = new ImageView(this);
        	switch (i) {
			case 0:
	img.setBackgroundColor(Color.GREEN); 				
				break;
			case 1:
				img.setBackgroundColor(Color.RED); 				
				break;
			case 2:
				img.setBackgroundColor(Color.YELLOW); 				
				break;
			case 3:
				img.setBackgroundColor(Color.CYAN); 				
				break;
			default:
				break;
			}
        	images[i]=img; 
		}
        //对dots进行填充 
        dots = new ImageView[images.length]; 
        //小图标 
        for (int i = 0; i < images.length; i++) { 
            imageView = new ImageView(this);
            //LinearLayout.LayoutParams.WRAP_CONTENT
            LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(20,20);
            layout.setMargins(5, 5, 5, 5);
            imageView.setLayoutParams(layout);
            dots[i] = imageView; 
            if (i == 0) { 
            	dots[i].setBackgroundResource(R.drawable.aaa); 
            } else { 
            	dots[i].setBackgroundResource(R.drawable.bbb); 
            } 
            group.addView(dots[i]);//将点点加入到ViewGroup中
        }
      //设置Adapter
        pager.setAdapter(new AdvAdapter(images)); 
      //设置监听,主要是设置点点的背景
        pager.setOnPageChangeListener(new GuidePageChangeListener());
        /** 
         * 2147483647 / 2 = 1073741820 - 1  
         * 设置ViewPager的当前项为一个比较大的数,以便一开始就可以左右循环滑动 
         */  
        int n = Integer.MAX_VALUE / 2 % dots.length;  
        int itemPosition = Integer.MAX_VALUE / 2 - n; 
        pager.setCurrentItem(itemPosition);
        // 自动切换页面功能  
        new Thread(new Runnable() {  
            @Override  
            public void run() {  
                while (true) {  
                	try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}  
                	//sendEmptyMessageDelayed中就是构建了一个Message,
                	//然后把这个Message的what设置成sendEmptyMessage方法中的What参数即可。
                    handler.sendEmptyMessage(0);  
                }  
            }  
        }).start(); 
	}
    private final class GuidePageChangeListener implements OnPageChangeListener { 
        @Override 
        public void onPageScrollStateChanged(int arg0) { 
        } 
        @Override 
        public void onPageScrolled(int arg0, float arg1, int arg2) { 
        } 
        @Override 
        public void onPageSelected(int arg0) { 
            int a = arg0 % dots.length;
            for (int i = 0; i < dots.length; i++) { 
            	if(a==i){
            		dots[i].setBackgroundResource(R.drawable.aaa); 
            	}else {
            		dots[i].setBackgroundResource(R.drawable.bbb); 
			}
            }
        } 
    } 
    private final class AdvAdapter extends PagerAdapter { 
        private ImageView[] views = null; 
        public AdvAdapter(ImageView[] advPics) { 
            this.views = advPics; 
        } 
        /** 
         * 销毁预加载以外的view对象, 会把需要销毁的对象的索引位置传进来,就是position, 
         * 因为imageViews只有四条数据,而position将会取到很大的值, 
         * 所以使用取余数的方法来获取每一条数据项。 
         */
        @Override 
        public void destroyItem(View arg0, int arg1, Object arg2) { 
            ((ViewPager) arg0).removeView(views[arg1%dots.length]); 
        } 
        /**
         * 该方法将返回所包含的 Item总个数。为了实现一种循环滚动的效果,返回了基本整型的最大值,这样就会创建很多的Item, 
         * 其实这并非是真正的无限循环。 
         */
        @Override 
        public int getCount() { 
            return Integer.MAX_VALUE; 
        } 
        /** 
         * 载入图片进去
         */
        @Override 
        public Object instantiateItem(View arg0, int arg1) { 
            ((ViewPager) arg0).addView(views[arg1%dots.length], 0); 
            return views[arg1%dots.length]; 
        } 
        /** 
         * 判断出去的view是否等于进来的view 如果为true直接复用 
         */
        @Override 
        public boolean isViewFromObject(View arg0, Object arg1) { 
            return arg0 == arg1; 
        } 
    } 
}


 
 
 
布局文件:
<RelativeLayout 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="com.example.demo.MainActivity" >

   <RelativeLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" > 
        <!-- ViewPager是一个控件 --> 
        <android.support.v4.view.ViewPager 
            android:id="@+id/adv_pager" 
            android:layout_width="match_parent" 
            android:layout_height="160dp" > 
            
        </android.support.v4.view.ViewPager>

        <LinearLayout
            android:id="@+id/viewGroup"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/adv_pager"
            android:layout_alignParentLeft="true"
            android:gravity="right"
            android:orientation="horizontal" >
        </LinearLayout>
 
    </RelativeLayout> 

</RelativeLayout>



?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值