android之ViewPager

项目中需要滑动切换两个页面,左右滑动。。。。最开始想到的是使用HorizontalScrollView,然后根据手指滑动后HorizontalScrollView起始点和终点来切换页面,然后,开始了自己的封装过程,苦不堪言,由于protected void onScrollChanged(int x, int y, int oldx, int oldy) 是一个protected方法,不能直接访问,所以只能,自定义一个接口来暴露这个方法,然而最后能拿到这些值后,发现滑动过程中在不断的调用,切换设置scrollview的scrollTo方法值后,效果不理想。。。

然后查方法的时候无意中看到了ViewPager这个类型,第一感觉就是这个,果断拿来使用。。

首先我在主页面中

<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="${relativePackage}.${activityClass}" >  
         <android.support.v4.view.ViewPager
            android:id="@+id/total_pages"
            android:layout_below="@+id/exchangeBtn"
            android:layout_width="480dp"
  	    android:layout_height="wrap_content"
  	    android:layout_centerHorizontal="true"
            />   
   
</RelativeLayout>

定义一个ViewPager。然后我写了两个view的xml,这两个view的xml就是我要展示的内容,这里就不做介绍了。。。

回到activity中

public static ViewPager totalPages;
public static List<View> viewList;

声明两个变量,一个是ViewPager一个是数据源数组

然后在OnCreate()方法里

setContentView(R.layout.weather_activity);
			
context = WeatherActivity.this;
									
totalPages = (ViewPager)this.findViewById(R.id.total_pages);
			
LayoutInflater inflate = getLayoutInflater();
						
			
View view = inflate.inflate(R.layout.weather_outside_view,myWeatherLayoout);
View view2 = inflate.inflate(R.layout.weather_inside_view,myWeatherLayoout);                                               viewList = new ArrayList<View>();
viewList.add(view);
viewList.add(view2);
			
PagerAdapter pagerAdapter = new PagerAdapter(){

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return viewList.size();
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
		// TODO Auto-generated method stub
			return arg0==arg1;
		}
				
		public void destroyItem(ViewGroup container,int position,Object object){
			container.removeView(viewList.get(position));
		}
				
		public Object instantiateItem(ViewGroup container,int position){
			container.addView(viewList.get(position));
					
			return viewList.get(position);
			}
		};
			
			
		totalPages.setAdapter(pagerAdapter);
		totalPages.setOnPageChangeListener(new MyPageChangeListener());

然后,实现viewpager变化时的方法

public class MyPageChangeListener implements OnPageChangeListener{

		@Override
		public void onPageScrollStateChanged(int arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onPageSelected(int arg0) {
			// TODO Auto-generated method stub
			switch(arg0){
			
			case 0:
				current_page = 0;
				topExchangeBtn.setText("outside");

				break;
			case 1:
				current_page = 1;
				topExchangeBtn.setText("insdie");
				
				break;
			
			}
			
			
		}
		
	}
当滑动后我改变了下记录当前页面的值,更改了按钮的标题



猜你喜欢

转载自blog.csdn.net/lu_ca/article/details/79472708
今日推荐