首页 > 代码库 > Android ViewPager滑动导航菜单

Android ViewPager滑动导航菜单

不占满整个页面的滑动菜单,也可以是自动滑动广告~

package view.example.viewpagerexample;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;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.util.DisplayMetrics;import android.view.View;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.widget.ImageView;import android.widget.LinearLayout;import android.app.Activity;public class MainActivity extends Activity {	private ViewPager adViewPager;	private LinearLayout pagerLayout;	private List<View> pageViews;	private ImageView[] imageViews;	private ImageView imageView;	private AdPageAdapter adapter;	private AtomicInteger atomicInteger = new AtomicInteger(0);	private boolean isContinue = true;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);		initViewPager();	}	private void initViewPager() {		// 从布局文件中获取ViewPager父容器		pagerLayout = (LinearLayout) findViewById(R.id.view_pager_content);		// 创建ViewPager		adViewPager = new ViewPager(this);		// 获取屏幕像素相关信息		DisplayMetrics dm = new DisplayMetrics();		getWindowManager().getDefaultDisplay().getMetrics(dm);		// 根据屏幕信息设置ViewPager广告容器的宽高		adViewPager.setLayoutParams(new LayoutParams(dm.widthPixels,				dm.heightPixels * 2 / 5));		// 将ViewPager容器设置到布局文件父容器中		pagerLayout.addView(adViewPager);		initPageAdapter();		initCirclePoint();		adViewPager.setAdapter(adapter);		adViewPager.setOnPageChangeListener(new AdPageChangeListener());		new Thread(new Runnable() {			@Override			public void run() {				while (true) {					if (isContinue) {						viewHandler.sendEmptyMessage(atomicInteger.get());						atomicOption();					}				}			}		}).start();	}	private void atomicOption() {		atomicInteger.incrementAndGet();		if (atomicInteger.get() > imageViews.length - 1) {			atomicInteger.getAndAdd(-5);		}		try {			Thread.sleep(3000);		} catch (InterruptedException e) {		}	}	/*	 * 每隔固定时间切换广告栏图片	 */	private final Handler viewHandler = new Handler() {		@Override		public void handleMessage(Message msg) {			adViewPager.setCurrentItem(msg.what);			super.handleMessage(msg);		}	};	private void initPageAdapter() {		pageViews = new ArrayList<View>();		ImageView img1 = new ImageView(this);		img1.setBackgroundResource(R.drawable.pic1);		pageViews.add(img1);		ImageView img2 = new ImageView(this);		img2.setBackgroundResource(R.drawable.pic2);		pageViews.add(img2);		ImageView img3 = new ImageView(this);		img3.setBackgroundResource(R.drawable.pic3);		pageViews.add(img3);		ImageView img4 = new ImageView(this);		img4.setBackgroundResource(R.drawable.pic4);		pageViews.add(img4);		ImageView img5 = new ImageView(this);		img5.setBackgroundResource(R.drawable.pic5);		pageViews.add(img5);		ImageView img6 = new ImageView(this);		img6.setBackgroundResource(R.drawable.pic6);		pageViews.add(img6);		adapter = new AdPageAdapter(pageViews);	}	private void initCirclePoint() {		ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);		imageViews = new ImageView[pageViews.size()];		// 广告栏的小圆点图标		for (int i = 0; i < pageViews.size(); i++) {			// 创建一个ImageView, 并设置宽高. 将该对象放入到数组中			imageView = new ImageView(this);			imageView.setLayoutParams(new LayoutParams(10, 10));			imageViews[i] = imageView;			// 初始值, 默认第0个选中			if (i == 0) {				imageViews[i].setBackgroundResource(R.drawable.point_focused);			} else {				imageViews[i].setBackgroundResource(R.drawable.point_unfocused);			}			// 将小圆点放入到布局中			group.addView(imageViews[i]);		}	}	/**	 * ViewPager 页面改变监听器	 */	private final class AdPageChangeListener implements OnPageChangeListener {		/**		 * 页面滚动状态发生改变的时候触发		 */		@Override		public void onPageScrollStateChanged(int arg0) {		}		/**		 * 页面滚动的时候触发		 */		@Override		public void onPageScrolled(int arg0, float arg1, int arg2) {		}		/**		 * 页面选中的时候触发		 */		@Override		public void onPageSelected(int arg0) {			// 获取当前显示的页面是哪个页面			atomicInteger.getAndSet(arg0);			// 重新设置原点布局集合			for (int i = 0; i < imageViews.length; i++) {				imageViews[arg0]						.setBackgroundResource(R.drawable.point_focused);				if (arg0 != i) {					imageViews[i]							.setBackgroundResource(R.drawable.point_unfocused);				}			}		}	}	private final class AdPageAdapter extends PagerAdapter {		private List<View> views = null;		/**		 * 初始化数据源, 即View数组		 */		public AdPageAdapter(List<View> views) {			this.views = views;		}		/**		 * 从ViewPager中删除集合中对应索引的View对象		 */		@Override		public void destroyItem(View container, int position, Object object) {			((ViewPager) container).removeView(views.get(position));		}		/**		 * 获取ViewPager的个数		 */		@Override		public int getCount() {			return views.size();		}		/**		 * 从View集合中获取对应索引的元素, 并添加到ViewPager中		 */		@Override		public Object instantiateItem(View container, int position) {			((ViewPager) container).addView(views.get(position), 0);			return views.get(position);		}		/**		 * 是否将显示的ViewPager页面与instantiateItem返回的对象进行关联 这个方法是必须实现的		 */		@Override		public boolean isViewFromObject(View view, Object object) {			return view == object;		}	}}

  XML代码:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <RelativeLayout        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_weight="5"        android:orientation="vertical" >        <LinearLayout            android:id="@+id/view_pager_content"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:orientation="vertical" />        <LinearLayout            android:id="@+id/viewGroup"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_below="@id/view_pager_content"            android:layout_marginTop="-25px"            android:gravity="right"            android:orientation="horizontal" >        </LinearLayout>    </RelativeLayout>    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_weight="2"        android:background="@color/white"        android:orientation="vertical" >    </LinearLayout></LinearLayout>

  

Android ViewPager滑动导航菜单