Android应用中使用ViewPager实现类似QQ的界面切换效果

2019-12-10 18:38:18丽君

界面2

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://www.easck.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:background="#00ff00" 
  android:orientation="vertical" > 
 
  <TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="layout2" /> 
 
</LinearLayout>

 

界面3

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://www.easck.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:background="#0000ff" 
  android:orientation="vertical" > 
 
  <TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="layout3" /> 
 
</LinearLayout> 

 

步骤五:编写主类,我的名字是叫ViewpagerActivity

package com.carter.viewpager; 
 
import java.util.ArrayList; 
import java.util.List; 
import java.util.zip.Inflater; 
 
import android.app.Activity; 
import android.app.ActivityGroup; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.OnPageChangeListener; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
 
public class ViewpagerActivity extends ActivityGroup { 
   
  /** 
   * 能够支持滑动的组件 
   */ 
  ViewPager mViewPager; 
   
  /** 
   * ViewPager 需要设置该Adapter才能实现添加界面, 
   * 该Adapter继承自PagerAdapter 
   */ 
  MyPagerAdapter adapter; 
   
  /** 
   * 用于保存三个界面 
   */ 
  List<View> list;  
   
  /** 
   * 用于生成界面 
   */ 
  LayoutInflater mInflater; 
   
   
   
   
  /** Called when the activity is first created. */ 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
     
    mInflater = this.getLayoutInflater(); 
     
    /** 
     * 添加进来三个界面到List,用于初始化PagerAdapter 
     */ 
    list = new ArrayList<View>(); 
    list.add(this.getLocalActivityManager().startActivity("layout1", new Intent(ViewpagerActivity.this, Layout1Activity.class)).getDecorView()); 
    list.add(mInflater.inflate(R.layout.layout2, null)); 
    list.add(mInflater.inflate(R.layout.layout3, null)); 
     
    mViewPager = (ViewPager)findViewById(R.id.mViewPager); 
    adapter = new MyPagerAdapter(list); 
    mViewPager.setAdapter(adapter); 
     
    /** 
     * 为ViewPager添加PageChangeListener,在回调的方法中可以完成其他的事情,例如处理一些界面标签的转换之类的,如果你有标签栏的话 
     */ 
    mViewPager.setOnPageChangeListener(new OnPageChangeListener() { 
       
      @Override 
      public void onPageSelected(int arg0) { 
        // TODO Auto-generated method stub 
        Log.i("carter", "onPageSelected"); 
      } 
       
      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
        // TODO Auto-generated method stub 
         
      } 
       
      @Override 
      public void onPageScrollStateChanged(int arg0) { 
        // TODO Auto-generated method stub 
         
      } 
    }); 
     
  } 
   
   
   
   
  class MyPagerAdapter extends PagerAdapter 
  { 
    List<View> mList; 
     
    public MyPagerAdapter(List<View> list){ 
      mList = list; 
    } 
 
    @Override 
    public int getCount() { 
      // TODO Auto-generated method stub 
      return mList.size(); 
    } 
 
    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
      // TODO Auto-generated method stub 
      return arg0 == (arg1); 
    } 
 
    @Override 
    public void destroyItem(View container, int position, Object object) { 
      // TODO Auto-generated method stub 
      ((ViewPager)container).removeView(mList.get(position)); 
    } 
 
    @Override 
    public Object instantiateItem(View container, int position) { 
      // TODO Auto-generated method stub 
      ((ViewPager)container).addView(mList.get(position), 0); 
      return mList.get(position); 
    }     
 
    @Override 
    public void finishUpdate(ViewGroup container) { 
      // TODO Auto-generated method stub 
      super.finishUpdate(container); 
    } 
  } 
}