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