• Android开发之利用ViewPager实现页面的切换(仿微信、QQ)


    这里利用ViewPager实现页面的滑动,下面直接上代码:

    1、首先写一个Activity,然后将要滑动的Fragment镶嵌到写好的Activity中。

    Activity的布局文件:activity_main.xml:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical" >
     6 
     7       <FrameLayout
     8            android:id="@+id/id_content"
     9            android:layout_weight="1"
    10            android:layout_width="match_parent"
    11            android:layout_height="0dp"/>
    12 
    13     <android.support.v4.view.ViewPager
    14         android:id="@+id/id_viewpage"
    15         android:layout_width="fill_parent"
    16         android:layout_height="0dp"
    17         android:layout_weight="0.001" >
    18     </android.support.v4.view.ViewPager>
    19 
    20     <include layout="@layout/bottom" />
    21 
    22 </LinearLayout>

    activity_main.xml中引入的布局(下面的切换的部分)

    bottom.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="fill_parent"
     4     android:layout_height="55dp"
     5     android:background="@drawable/bottom"
     6     android:orientation="horizontal" >
     7 
     8     <LinearLayout
     9         android:id="@+id/id_tab_education"
    10         android:layout_width="0dp"
    11         android:layout_height="match_parent"
    12         android:layout_weight="1"
    13         android:gravity="center"
    14         android:orientation="vertical" >
    15 
    16         <!-- android:clickable="false" 是为了防止ImageButton截取了触摸事件 ,这里事件要给它的上一级linearlayout -->
    17 
    18         <ImageButton
    19             android:id="@+id/id_tab_education_img"
    20             android:layout_width="wrap_content"
    21             android:layout_height="wrap_content"
    22             android:background="#00000000"
    23             android:clickable="false"
    24             android:src="@drawable/tab_bar_01_check" />
    25 
    26         <TextView
    27             android:layout_width="wrap_content"
    28             android:layout_height="wrap_content"
    29             android:text="@string/bottom_jurisdiction" />
    30     </LinearLayout>
    31 
    32     <LinearLayout
    33         android:id="@+id/id_tab_frd"
    34         android:layout_width="0dp"
    35         android:layout_height="match_parent"
    36         android:layout_weight="1"
    37         android:gravity="center"
    38         android:orientation="vertical" >
    39 
    40         <ImageButton
    41             android:id="@+id/id_tab_frd_img"
    42             android:layout_width="wrap_content"
    43             android:layout_height="wrap_content"
    44             android:background="#00000000"
    45             android:clickable="false"
    46             android:src="@drawable/tab_bar_04" />
    47 
    48         <TextView
    49             android:layout_width="wrap_content"
    50             android:layout_height="wrap_content"
    51             android:text="@string/bottom_discover" />
    52     </LinearLayout>
    53 
    54     <LinearLayout
    55         android:id="@+id/id_tab_setting"
    56         android:layout_width="0dp"
    57         android:layout_height="match_parent"
    58         android:layout_weight="1"
    59         android:gravity="center"
    60         android:orientation="vertical" >
    61 
    62         <ImageButton
    63             android:id="@+id/id_tab_setting_img"
    64             android:layout_width="wrap_content"
    65             android:layout_height="wrap_content"
    66             android:background="#00000000"
    67             android:clickable="false"
    68             android:src="@drawable/tab_bar_05" />
    69 
    70         <TextView
    71             android:layout_width="wrap_content"
    72             android:layout_height="wrap_content"
    73             android:text="@string/bottom_my" />
    74     </LinearLayout>
    75 
    76 </LinearLayout>

    MainActivity.class(用来镶嵌Fragment)

      1 package com.example.activity;
      2 
      3 import com.example.fragment.SeekFragment;
      4 import com.example.fragment.ProcedureFragment;
      5 import com.example.fragment.MyFragment;
      6 import com.example.myproject.R;
      7 
      8 import android.app.Activity;
      9 import android.os.Bundle;
     10 import android.support.v4.app.Fragment;
     11 import android.support.v4.app.FragmentActivity;
     12 import android.support.v4.app.FragmentManager;
     13 import android.support.v4.app.FragmentTransaction;
     14 import android.support.v4.view.ViewPager;
     15 import android.support.v4.view.ViewPager.OnPageChangeListener;
     16 import android.view.KeyEvent;
     17 import android.view.View;
     18 import android.view.View.OnClickListener;
     19 import android.view.Window;
     20 import android.widget.ImageButton;
     21 import android.widget.LinearLayout;
     22 import android.widget.Toast;
     23 
     24 public class MainActivity extends FragmentActivity implements OnClickListener{
     25 
     26     private long lastTime;//退出键的最后时间
     27     private ViewPager mViewPager;// 用来放置界面切换
     28     // 三个Tab,每个Tab包含一个按钮
     29     private LinearLayout mTabEducation;
     30     private LinearLayout mTabFrd;
     31     private LinearLayout mTabSetting;
     32     // 三个按钮
     33     private ImageButton mEducationImg;
     34     private ImageButton mFrdImg;
     35     private ImageButton mSettingImg;
     36     // 初始化3个Fragment
     37     private Fragment jurisdiction;
     38     private Fragment discover;
     39     private Fragment setting;
     40 
     41     @Override
     42     protected void onCreate(Bundle savedInstanceState) {
     43         // TODO Auto-generated method stub
     44         super.onCreate(savedInstanceState);
     45         requestWindowFeature(Window.FEATURE_NO_TITLE);
     46         setContentView(R.layout.activity_main);
     47         
     48         initView();
     49         initEvent();
     50         initViewPage(0);
     51     }
     52 
     53     /*
     54      * 判断哪个要显示,及设置按钮图片
     55      */
     56     @Override
     57     public void onClick(View arg0) {
     58         switch (arg0.getId()) {
     59         case R.id.id_tab_education:
     60             initViewPage(0);
     61             mViewPager.setCurrentItem(0);
     62             resetImg();
     63             mEducationImg.setImageResource(R.drawable.tab_bar_01_check);
     64             break;
     65         case R.id.id_tab_frd:
     66             initViewPage(1);
     67             mViewPager.setCurrentItem(1);
     68             resetImg();
     69             mFrdImg.setImageResource(R.drawable.tab_bar_04_check);
     70             break;
     71         case R.id.id_tab_setting:
     72             initViewPage(2);
     73             mViewPager.setCurrentItem(2);
     74             resetImg();
     75             mSettingImg.setImageResource(R.drawable.tab_bar_05_check);
     76             break;
     77         default:
     78             break;
     79         }
     80     }
     81 
     82     /*
     83      * 初始化配置
     84      */
     85     private void initView() {
     86         mViewPager = (ViewPager) findViewById(R.id.id_viewpage);
     87         // 初始化三个LinearLayout
     88         mTabEducation = (LinearLayout) findViewById(R.id.id_tab_education);
     89         mTabFrd = (LinearLayout) findViewById(R.id.id_tab_frd);
     90         mTabSetting = (LinearLayout) findViewById(R.id.id_tab_setting);
     91         // 初始化三个按钮
     92         mEducationImg = (ImageButton) findViewById(R.id.id_tab_education_img);
     93         mFrdImg = (ImageButton) findViewById(R.id.id_tab_frd_img);
     94         mSettingImg = (ImageButton) findViewById(R.id.id_tab_setting_img);
     95     }
     96 
     97     /*
     98      * 初始化initViewPage
     99      */
    100     private void initViewPage(int i) {
    101         FragmentManager fm = getSupportFragmentManager();
    102         FragmentTransaction transaction = fm.beginTransaction();// 创建一个事务
    103         hideFragment(transaction);// 我们先把所有的Fragment隐藏了,然后下面再开始处理具体要显示的Fragment
    104         switch (i) {
    105         case 0:
    106             if (jurisdiction == null) {
    107                 jurisdiction = new ProcedureFragment();
    108                 transaction.add(R.id.id_content, jurisdiction);// 将微信聊天界面的Fragment添加到Activity中
    109             } else {
    110                 transaction.show(jurisdiction);
    111             }
    112             break;
    113         case 1:
    114             if (discover == null) {
    115                 discover = new SeekFragment();
    116                 transaction.add(R.id.id_content, discover);
    117             } else {
    118                 transaction.show(discover);
    119             }
    120             break;
    121         case 2:
    122             if (setting == null) {
    123                 setting = new MyFragment();
    124                 transaction.add(R.id.id_content, setting);
    125             } else {
    126                 transaction.show(setting);
    127             }
    128             break;
    129 
    130         default:
    131             break;
    132         }
    133         
    134         transaction.commit();// 提交事务
    135     }
    136 
    137     private void initEvent() {
    138         mTabEducation.setOnClickListener(this);
    139         mTabFrd.setOnClickListener(this);
    140         mTabSetting.setOnClickListener(this);
    141         mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
    142             @Override
    143             public void onPageSelected(int arg0) {
    144                 int currentItem = mViewPager.getCurrentItem();
    145                 switch (currentItem) {
    146                 case 0:
    147                     resetImg();
    148                     mEducationImg.setImageResource(R.drawable.tab_bar_01_check);
    149                     break;
    150                 case 1:
    151                     resetImg();
    152                     mFrdImg.setImageResource(R.drawable.tab_bar_04_check);
    153                     break;
    154                 case 2:
    155                     resetImg();
    156                     mSettingImg.setImageResource(R.drawable.tab_bar_05_check);
    157                 default:
    158                     break;
    159                 }
    160             }
    161 
    162             @Override
    163             public void onPageScrolled(int arg0, float arg1, int arg2) {
    164 
    165             }
    166 
    167             @Override
    168             public void onPageScrollStateChanged(int arg0) {
    169 
    170             }
    171         });
    172     }
    173 
    174     /*
    175      * 隐藏所有的Fragment
    176      */
    177     private void hideFragment(FragmentTransaction transaction) {
    178         if (jurisdiction != null) {
    179             transaction.hide(jurisdiction);
    180         }
    181         if (discover != null) {
    182             transaction.hide(discover);
    183         }
    184         if (setting != null) {
    185             transaction.hide(setting);
    186         }
    187     }
    188 
    189     /*
    190      * 把所有图片变暗
    191      */
    192     private void resetImg() {
    193         mEducationImg.setImageResource(R.drawable.tab_bar_01);
    194         mFrdImg.setImageResource(R.drawable.tab_bar_04);
    195         mSettingImg.setImageResource(R.drawable.tab_bar_05);
    196     }
    197     @Override
    198     public boolean onKeyDown(int keyCode, KeyEvent event) {
    199 
    200         if (keyCode == KeyEvent.KEYCODE_BACK) {
    201             if (System.currentTimeMillis() - lastTime <= 2000) {
    202                 finish();
    203             } else {
    204                 Toast.makeText(this, "再按一次退出程序", 1000).show();
    205                 lastTime = System.currentTimeMillis();
    206             }
    207             return false;
    208         }
    209         return super.onKeyDown(keyCode, event);
    210     }
    211 }

    通过以上代码即可实现微信或QQ的那种页面的切换了,具体里面的内容则根据自身情况在相应的fragment中来实现。

    下面给一个一个空的Fragment,以此为蓝图,剩余的部分可以在此基础上更改添加。

    SeekFragment.java

     1 package com.example.fragment;
     2 
     3 import com.example.myproject.R;
     4 
     5 import android.os.Bundle;
     6 import android.support.v4.app.Fragment;
     7 import android.view.LayoutInflater;
     8 import android.view.View;
     9 import android.view.ViewGroup;
    10 /**
    11  * 查找fragment
    12  * @author admin
    13  *
    14  */
    15 public class SeekFragment extends Fragment {
    16     private View rootView;
    17     @Override
    18     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    19             Bundle savedInstanceState) {
    20         if (null == rootView) {
    21             rootView = inflater.inflate(R.layout.fragment_seek, container,
    22                     false);
    23             initView(rootView);
    24         }
    25         return rootView;
    26     }
    27     /**
    28      * 用于初始化,具体操作视自己情况而定
    29      * @param rootView
    30      */
    31     private void initView(View rootView) {
    32 
    33     }
    34 }
  • 相关阅读:
    python学习之集合
    fastjson SerializerFeature详细使用教程(特别注意:重复引用和循环引用问题)
    Elasticsearch 常见问题汇总及解决姿势(后续会持续更新)
    Elasticsearch常用操作命令——增删改查、集群维护
    Python 常用包、模块定义详解
    Elasticsearch Python脚本查询常用操作
    右键菜单中新建EXCEL丢失解决办法
    解决Spring Boot 使用RedisTemplate 存储键值出现乱码
    深入理解xhr responseType blob arrayBuffer document text json使用
    Android内存溢出解决方案总结
  • 原文地址:https://www.cnblogs.com/1925yiyi/p/7494679.html
Copyright © 2020-2023  润新知