• 利用Viewpager和Fragment实现UI框架的搭建实现


    package com.loaderman.uiframedemo;
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.AppCompatActivity;
    import android.view.Display;
    import android.view.View;
    import android.view.WindowManager;
    import android.view.animation.Animation;
    import android.view.animation.TranslateAnimation;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
    
        private ViewPager mTabPager;
        private ImageView mTabImg;// 动画图片
        private TextView  mTab1, mTab2, mTab3, mTab4;
        private int zero      = 0;// 动画图片偏移量
        private int currIndex = 0;// 当前页卡编号
        private int one;//单个水平动画位移
        private int two;
        private int three;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
            setContentView(R.layout.activity_main);
            mTabPager = (ViewPager) findViewById(R.id.tabpager);
            mTabPager.addOnPageChangeListener(new MyOnPageChangeListener());
            mTab1 = (TextView) findViewById(R.id.tv_weixin);
            mTab2 = (TextView) findViewById(R.id.tv_address);
            mTab3 = (TextView) findViewById(R.id.tv_friends);
            mTab4 = (TextView) findViewById(R.id.tv_settings);
            mTabImg = (ImageView) findViewById(R.id.img_tab_now);
            mTab1.setOnClickListener(new MyOnClickListener(0));
            mTab2.setOnClickListener(new MyOnClickListener(1));
            mTab3.setOnClickListener(new MyOnClickListener(2));
            mTab4.setOnClickListener(new MyOnClickListener(3));
            Display currDisplay = getWindowManager().getDefaultDisplay();//获取屏幕当前分辨率
            int displayWidth = currDisplay.getWidth();
            //        int displayHeight = currDisplay.getHeight();
            one = displayWidth / 4; //设置水平动画平移大小
            two = one * 2;
            three = one * 3;
            mTabPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
        }
        /**
         * 1、ViewPager展示的是一个又一个普通的View对象,使用PagerAdapter
         * 2、ViewPager展示的是一个又一个Fragment所包装的View对象,使用FragmentPagerAdapter
         */
        class MyAdapter extends FragmentPagerAdapter {
            private String[] mTabNames;
            public MyAdapter(FragmentManager fm) {
                super(fm);
                mTabNames = new String[]{"weixin", "adreess", "friend", "settring",};
            }
            @Override
            public Fragment getItem(int position) {
                return FragmentFactory.getFragment(position);
            }
            @Override
            public int getCount() {
                return mTabNames.length;
            }
    
        }
        /**
         * 头标点击监听
         */
        public class MyOnClickListener implements View.OnClickListener {
            private int index = 0;
    
            public MyOnClickListener(int i) {
                index = i;
            }
            @Override
            public void onClick(View v) {
                mTabPager.setCurrentItem(index);
            }
        };
        /* 页卡切换监听
        */
        public class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {
            @Override
            public void onPageSelected(int arg0) {
                Animation animation = null;
                switch (arg0) {
                    case 0:
                        if (currIndex == 1) {
                            animation = new TranslateAnimation(one, 0, 0, 0);
                        } else if (currIndex == 2) {
                            animation = new TranslateAnimation(two, 0, 0, 0);
                        } else if (currIndex == 3) {
                            animation = new TranslateAnimation(three, 0, 0, 0);
                        }
                        break;
                    case 1:
                        if (currIndex == 0) {
                            animation = new TranslateAnimation(zero, one, 0, 0);
                        } else if (currIndex == 2) {
                            animation = new TranslateAnimation(two, one, 0, 0);
                        } else if (currIndex == 3) {
                            animation = new TranslateAnimation(three, one, 0, 0);
                        }
                        break;
                    case 2:
                        if (currIndex == 0) {
                            animation = new TranslateAnimation(zero, two, 0, 0);
                        } else if (currIndex == 1) {
                            animation = new TranslateAnimation(one, two, 0, 0);
                        } else if (currIndex == 3) {
                            animation = new TranslateAnimation(three, two, 0, 0);
                        }
                        break;
                    case 3:
                        if (currIndex == 0) {
                            animation = new TranslateAnimation(zero, three, 0, 0);
                        } else if (currIndex == 1) {
                            animation = new TranslateAnimation(one, three, 0, 0);
                        } else if (currIndex == 2) {
                            animation = new TranslateAnimation(two, three, 0, 0);
                        }
                        break;
                }
                currIndex = arg0;
                animation.setFillAfter(true);// True:图片停在动画结束位置
                animation.setDuration(150);
                mTabImg.startAnimation(animation);
            }
    
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }
    
            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        }
    }
    
    package com.loaderman.uiframedemo;
    
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public abstract class BaseFragment extends Fragment {
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            return initView();
        }
        public abstract  View initView() ;
    }
    
    package com.loaderman.uiframedemo;
    
    import android.support.v4.app.Fragment;
    import java.util.HashMap;
    
    public class FragmentFactory {
        private static HashMap<Integer, Fragment> savedFragment = new HashMap<Integer, Fragment>();
        public static Fragment getFragment(int position) {
            Fragment fragment = savedFragment.get(position);
            if (fragment == null) {
                switch (position) {
                    case 0:
                        fragment = new WenxinFragment();
                        break;
                    case 1:
                        fragment = new AddressFragment();
                        break;
                    case 2:
                        fragment = new FriendFragment();
                        break;
                    case 3:
                        fragment = new SettingFragment();
                        break;
                }
                savedFragment.put(position, fragment);
            }
            return fragment;
        }
    }
    

    WenxinFragment,AddressFeament,FriendFragment,SettingFragment的实现类似如下:

    package com.loaderman.uiframedemo;
    
    import android.view.View;
    import android.widget.TextView;
    
    public class SettingFragment extends BaseFragment {
        @Override
        public View initView() {
            TextView tv  =  new TextView(getContext());
            tv.setText("设置");
            return tv;
        }
    }
    

     效果图:

  • 相关阅读:
    关于React的脚手架
    yarn和npm
    谈谈NPM和Webpack的关系
    php开发环境和框架phalcon的搭建
    Centos6.5--svn搭建
    System.Diagnostics.Process.Start(ProcessStartInfo)
    PHP错误:call to undefined function imagecreatetruecolor
    PostgreSQL删除表中重复数据行
    URL存在http host头攻击漏洞-修复方案
    for循环的执行顺序
  • 原文地址:https://www.cnblogs.com/loaderman/p/6489454.html
Copyright © 2020-2023  润新知