项目中需要滑动切换两个页面,左右滑动。。。。最开始想到的是使用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; } } }当滑动后我改变了下记录当前页面的值,更改了按钮的标题