zoukankan      html  css  js  c++  java
  • ViewPager+Fragment的结合使用,实现QQ界面的理解

    http://www.cssxt.com/html/2449/2449.html

    效果如图:
    ViewPager+Fragment的结合使用,实现QQ界面的理解ViewPager+Fragment的结合使用,实现QQ界面的理解ViewPager+Fragment的结合使用,实现QQ界面的理解ViewPager+Fragment的结合使用,实现QQ界面的理解

    实现代码解析:
    MainActivity.java
    1.引入布局文件
    2.4个标题控件的初始化以及点击事件的监听设置
    3.viewpager控件的初始化,获取Fragment对象并保存在容器中,设置viewpager的适配器和监听
    4.viewpager的监听OnPageChangeListener方法的实现,主要是标题栏下的指示横线的移动操作。

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    package com.aven.qqdemo;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.content.res.Resources;
    import android.os.Bundle;
    import android.os.Parcelable;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.Window;
    import android.view.animation.Animation;
    import android.view.animation.TranslateAnimation;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import com.demo.R;
    
    /**
     * 参考原作者D.Winter基础,
     * 
     * @author avenwu
     * iamavenwu@gmail.com
     * 
     */
    public class MainActivity extends FragmentActivity {
        private static final String TAG = "MainActivity";
        private ViewPager mPager;
        private ArrayList<Fragment> fragmentsList;
        private ImageView ivBottomLine;
        private TextView tvTabActivity, tvTabGroups, tvTabFriends, tvTabChat;
    
        private int currIndex = 0;
        private int bottomLineWidth;
        private int offset = 0;
        private int position_one;
        private int position_two;
        private int position_three;
        private Resources resources;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.main);
            resources = getResources();
            InitWidth();
            InitTextView();
            InitViewPager();
        }
    
        private void InitTextView() {
            tvTabActivity = (TextView) findViewById(R.id.tv_tab_activity);
            tvTabGroups = (TextView) findViewById(R.id.tv_tab_groups);
            tvTabFriends = (TextView) findViewById(R.id.tv_tab_friends);
            tvTabChat = (TextView) findViewById(R.id.tv_tab_chat);
    
            tvTabActivity.setOnClickListener(new MyOnClickListener(0));
            tvTabGroups.setOnClickListener(new MyOnClickListener(1));
            tvTabFriends.setOnClickListener(new MyOnClickListener(2));
            tvTabChat.setOnClickListener(new MyOnClickListener(3));
        }
    
        private void InitViewPager() {
            mPager = (ViewPager) findViewById(R.id.vPager);
            fragmentsList = new ArrayList<Fragment>();
    
            Fragment activityfragment = TestFragment.newInstance("Hello Activity.");
            Fragment groupFragment = TestFragment.newInstance("Hello Group.");
            Fragment friendsFragment=TestFragment.newInstance("Hello Friends.");
            Fragment chatFragment=TestFragment.newInstance("Hello Chat.");
    
            fragmentsList.add(activityfragment);
            fragmentsList.add(groupFragment);
            fragmentsList.add(friendsFragment);
            fragmentsList.add(chatFragment);
    
            mPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentsList));
            mPager.setCurrentItem(0);
            mPager.setOnPageChangeListener(new MyOnPageChangeListener());
        }
    
        private void InitWidth() {
            ivBottomLine = (ImageView) findViewById(R.id.iv_bottom_line);
            bottomLineWidth = ivBottomLine.getLayoutParams().width;
            Log.d(TAG, "cursor imageview width=" + bottomLineWidth);
            DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);
            int screenW = dm.widthPixels;
            offset = (int) ((screenW / 4.0 - bottomLineWidth) / 2);
            Log.i("MainActivity", "offset=" + offset);
    
            position_one = (int) (screenW / 4.0);
            position_two = position_one * 2;
            position_three = position_one * 3;
        }
    
        public class MyOnClickListener implements View.OnClickListener {
            private int index = 0;
    
            public MyOnClickListener(int i) {
                index = i;
            }
    
            @Override
            public void onClick(View v) {
                mPager.setCurrentItem(index);
            }
        };
    
        public class MyOnPageChangeListener implements OnPageChangeListener {
    
            @Override
            public void onPageSelected(int arg0) {
                Animation animation = null;
                switch (arg0) {
                case 0:
                    if (currIndex == 1) {
                        animation = new TranslateAnimation(position_one, 0, 0, 0);
                        tvTabGroups.setTextColor(resources.getColor(R.color.lightwhite));
                    } else if (currIndex == 2) {
                        animation = new TranslateAnimation(position_two, 0, 0, 0);
                        tvTabFriends.setTextColor(resources.getColor(R.color.lightwhite));
                    } else if (currIndex == 3) {
                        animation = new TranslateAnimation(position_three, 0, 0, 0);
                        tvTabChat.setTextColor(resources.getColor(R.color.lightwhite));
                    }
                    tvTabActivity.setTextColor(resources.getColor(R.color.white));
                    break;
                case 1:
                    if (currIndex == 0) {
                        animation = new TranslateAnimation(0, position_one, 0, 0);
                        tvTabActivity.setTextColor(resources.getColor(R.color.lightwhite));
                    } else if (currIndex == 2) {
                        animation = new TranslateAnimation(position_two, position_one, 0, 0);
                        tvTabFriends.setTextColor(resources.getColor(R.color.lightwhite));
                    } else if (currIndex == 3) {
                        animation = new TranslateAnimation(position_three, position_one, 0, 0);
                        tvTabChat.setTextColor(resources.getColor(R.color.lightwhite));
                    }
                    tvTabGroups.setTextColor(resources.getColor(R.color.white));
                    break;
                case 2:
                    if (currIndex == 0) {
                        animation = new TranslateAnimation(0, position_two, 0, 0);
                        tvTabActivity.setTextColor(resources.getColor(R.color.lightwhite));
                    } else if (currIndex == 1) {
                        animation = new TranslateAnimation(position_one, position_two, 0, 0);
                        tvTabGroups.setTextColor(resources.getColor(R.color.lightwhite));
                    } else if (currIndex == 3) {
                        animation = new TranslateAnimation(position_three, position_two, 0, 0);
                        tvTabChat.setTextColor(resources.getColor(R.color.lightwhite));
                    }
                    tvTabFriends.setTextColor(resources.getColor(R.color.white));
                    break;
                case 3:
                    if (currIndex == 0) {
                        animation = new TranslateAnimation(0, position_three, 0, 0);
                        tvTabActivity.setTextColor(resources.getColor(R.color.lightwhite));
                    } else if (currIndex == 1) {
                        animation = new TranslateAnimation(position_one, position_three, 0, 0);
                        tvTabGroups.setTextColor(resources.getColor(R.color.lightwhite));
                    } else if (currIndex == 2) {
                        animation = new TranslateAnimation(position_two, position_three, 0, 0);
                        tvTabFriends.setTextColor(resources.getColor(R.color.lightwhite));
                    }
                    tvTabChat.setTextColor(resources.getColor(R.color.white));
                    break;
                }
                currIndex = arg0;
                animation.setFillAfter(true);
                animation.setDuration(300);
                ivBottomLine.startAnimation(animation);
            }
    
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }
    
            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        }
    }
    

    TestFragment
    获取Fragment对应的布局,并且设置相应的参数。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    package com.aven.qqdemo;
    
    import com.demo.R;
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    public class TestFragment extends Fragment {
        private static final String TAG = "TestFragment";
        private String hello;// = "hello android";
        private String defaultHello = "default value";
    
        static TestFragment newInstance(String s) {
            TestFragment newFragment = new TestFragment();
            Bundle bundle = new Bundle();
            bundle.putString("hello", s);
            newFragment.setArguments(bundle);
            return newFragment;
    
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d(TAG, "TestFragment-----onCreate");
            Bundle args = getArguments();
            hello = args != null ? args.getString("hello") : defaultHello;
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
            Log.d(TAG, "TestFragment-----onCreateView");
            View view = inflater.inflate(R.layout.lay1, container, false);
            TextView viewhello = (TextView) view.findViewById(R.id.tv_hello);
            viewhello.setText(hello);
            return view;
    
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            Log.d(TAG, "TestFragment-----onDestroy");
        }
    
    }
    

    MyFragmentPagerAdapter
    对包含Fragment对象的容器进行适配。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    package com.aven.qqdemo;
    
    import java.util.ArrayList;
    
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    
    public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
        private ArrayList<Fragment> fragmentsList;
    
        public MyFragmentPagerAdapter(FragmentManager fm) {
            super(fm);
        }
    
        public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) {
            super(fm);
            this.fragmentsList = fragments;
        }
    
        @Override
        public int getCount() {
            return fragmentsList.size();
        }
    
        @Override
        public Fragment getItem(int arg0) {
            return fragmentsList.get(arg0);
        }
    
        @Override
        public int getItemPosition(Object object) {
            return super.getItemPosition(object);
        }
    
    }
    
  • 相关阅读:
    写一个通用的事件侦听器函数
    基于LuckySheet在线表格的Excel下载功能开发
    node项目中npm 第三方包引用规则
    js 本地保存 json/txt 文件
    letcood 算法题 -- 两数相加
    ES6新增语法总结
    关于Promise,你必须知道的几点。
    Promise 基础
    学习网页收藏
    android Listview每一个item添加点击事件
  • 原文地址:https://www.cnblogs.com/daishuguang/p/3888622.html
Copyright © 2011-2022 走看看