美文网首页
Android之智慧北京一

Android之智慧北京一

作者: 破荒之恋 | 来源:发表于2016-12-24 13:42 被阅读48次

Android之智慧北京一

公司的角色
  1. 产品:搜集用户的需求,将需求转化为功能,将功能转化为用户体验(产品汪)
  2. 技术:实现产品提出的需求
  3. 测试:检测技术实现的功能
  4. 运营:对产品进行运营维护
  5. 销售:卖产品
研发流程
  1. 需求分析: 写需求文档
  2. 原型设计:
  3. 时间估算:
  4. 迭代开发:
  5. 阶段测试:
  6. 准备渠道:

代码规范

  1. 如何去导入和新建代码格式化(code formator)
  2. 如何去写注释模板(comments template)
欢迎界面
  1. 动画的实现:旋转
  2. 缩放
  3. 透明渐变动画

动画的监听

  • 引导页面
    ViewPager数据的添加PagerAdapter的使用
    监听的几个方法(onPagerScrolled,onPagerSelected,onPagerStateChange)

静态点的添加LayoutParams的使用

动态点的移动距离的计算

LayoutParams的使用

xml样式drawable的selector样式
color的selector的样式
shape的写法

主页的实现

github网站的使用
网站:https://github.com/
语言的过滤Java,点赞的过滤
英文搜索关键字

slidingMenu的介绍
  1. 导入开源库

  2. 让activity 继承 SlidingxxxxActivity,将onCreate 改为public

  3. slidngMenu常用的api

/**
 * 点击菜单栏图标关闭菜单,若关闭着点击就打开
 */
private void toggleSetMenu()
{
    //获取上下文取得菜单实例:点击菜单,若菜单打开就关闭,关闭就打开
    MainUIActivity ui=(MainUIActivity) mContext;
    SlidingMenu menu=ui.getSlidingMenu();
    menu.toggle();

}
 * 设置menu是否可见即是否能否侧滑
 * @param enable

public void setSlindingMenu(boolean enable){
    MainUIActivity mainui=(MainUIActivity) mActivity;
    SlidingMenu menu=mainui.getSlidingMenu();
    menu.setTouchModeAbove(enable ? SlidingMenu.TOUCHMODE_FULLSCREEN:SlidingMenu.TOUCHMODE_NONE);
}

mvc的思想

  1. Mode : 数据
  2. View : 显示的视图
  3. controller : 控制器
    关系:
    controller 负责和mode以及View进行通讯,用来管理调用mode和view

主页MainUIActivity的实现

    /*
     *@描述:主界面添加--------------主页和左侧菜单--------------
     */
public class MainUIActivity extends SlidingFragmentActivity {

    private final static String TAG_CONTENT="content"; //主页
    private final static String TAG_LEFT_MENU="left_menu"; //左侧
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //取消标题
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        //设置内容区域
        setContentView(R.layout.activity_mainui);

        //设置behind部分
        setBehindContentView(R.layout.main_left);
        //获得SlidingMenu的实例
        SlidingMenu menu=getSlidingMenu();
        //设置模式
        menu.setMode(SlidingMenu.LEFT);
        //指定的是菜单的边缘到屏幕边缘的距离
        menu.setBehindOffset(180);
        //菜单的区域宽度
        //menu.setBehindWidth(100);
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

        //加载fragment的方式加载页面
        initFragment();

    }

    private void initFragment() {
        FragmentManager  fm=getSupportFragmentManager();

        //开启事务
        FragmentTransaction transaction=fm.beginTransaction();

        //添加主页fragmeng
        transaction.replace(R.id.main_container, new ContentFragment(), TAG_CONTENT);

        //添加左侧fragmeng
        transaction.replace(R.id.main_left, new LeftFragment(), TAG_LEFT_MENU);

        transaction.commit();

    }

    /**
     * 获取左侧菜单
     */
    public LeftFragment getLeftFragment()
    {
        FragmentManager fm=getSupportFragmentManager();
        return (LeftFragment) fm.findFragmentByTag(TAG_LEFT_MENU);

    }

    /**
     * 获得当前的实例Fragment
     * @return
     */
    public ContentFragment getContentFragment()

    {
        FragmentManager fm=getSupportFragmentManager();
        return (ContentFragment) fm.findFragmentByTag(TAG_CONTENT);

    }
}

左滑菜单的实现

*@描述:左侧菜单
     */
    public class LeftFragment extends BaseFragment implements OnItemClickListener {

        public static final String  TAG = "LeftFragment";
        private List<NewCenterMenuListBean> mMenuData;  //菜单对应的数据
        private ListView    listview;
        private int mCurrent;
        private NewsMenuAdapter menuAdapter;
        @Override
        protected View initView() {
        /*  TextView tv=new TextView(mActivity);
            tv.setText("菜单内容");
            return tv;*/

            /**
             * 设置侧滑菜单的样式
             */
            listview = new ListView(mActivity);
            listview.setBackgroundColor(Color.BLACK);//设置背景色为黑色
            listview.setDividerHeight(0); //去掉分割线
            listview.setPadding(0, 50, 0,0);
            listview.setCacheColorHint(Color.TRANSPARENT);
            listview.setSelector(android.R.color.transparent);
            return listview;

        }

        /**
         * 设置菜单数据
         * @param mMenuData
         */
        public void setMenuData(List<NewCenterMenuListBean> datas)
        {
            //设置默认选中的第一个item
            this.mCurrent=0;

            //数据的接收
            this.mMenuData=datas;

            menuAdapter = new NewsMenuAdapter();
            //数据展示---adapter---list
            listview.setAdapter(menuAdapter);

            //设置listview条目的点击事件
            listview.setOnItemClickListener(this);
        }
        //listview适配器
        class NewsMenuAdapter extends BaseAdapter{
            @Override
            public int getCount()
            {
                if(mMenuData!=null){
                    return mMenuData.size();
                }
                return 0;
            }

            @Override
            public Object getItem(int position)
            {
                return null;
            }

            @Override
            public long getItemId(int position)
            {
                return 0;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent)
            {
                if(convertView==null){
                    //没有复用时
                    convertView=View.inflate(mActivity, R.layout.newsmenu, null);
                }

                TextView tv=(TextView) convertView.findViewById(R.id.news_menu);
                String title=mMenuData.get(position).title;
                tv.setText(title);

                //判断么默认中下的
                /*if(mCurrent==position){
                    tv.setEnabled(true);
                }
                else{
                    tv.setEnabled(false);
                }*/

                tv.setEnabled(mCurrent==position?true:false);

                return tv;
            }

        }
        /**
         * listview的条目的点击事件
         */
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            //不做处理
            if(mCurrent==position){
                return;
            }
            //1、选中对应的项
            this.mCurrent=position;
            //UI更新
            menuAdapter.notifyDataSetChanged();

            //2、收起菜单
            MainUIActivity mainui=(MainUIActivity) mActivity;
            mainui.getSlidingMenu().toggle();

            //3、右侧内容区域的改变
            ContentFragment contentFra=mainui.getContentFragment();
            contentFra.switchMenuPager(mCurrent);
        }

    }

抽取相同的内容成为基类:

*@描述:父类容器BaseFragment,集成了相似的内容
 */
public abstract class BaseFragment extends Fragment {

    public Activity mActivity;
    @Override
    public void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.mActivity=getActivity();

    }
    @Override
    public View onCreateView(LayoutInflater inflater,
             ViewGroup container,  Bundle savedInstanceState) {
        return initView();
    }

    @Override
    public void onActivityCreated( Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //加载数据
        initData();

    }

    protected void initData() {

    }
    //留给子类去具体实现
    protected abstract View initView();

}

主页内容区域的实现:

 *@描述:这是加载页面内容的容器,用来管理tab的切换内容
 */
public class ContentFragment extends BaseFragment implements OnCheckedChangeListener {
    public static final String  tag = "ContentFragment";

    @ViewInject(R.id.content_pager)     //viewPager
    private NoTouchViewPager mPager;    
    @ViewInject(R.id.content_tab_rad)     //底部容器

    private RadioGroup mRadioGroup;    
    private List<TabBasePager> mList;  //显示内容 显示页面

    private int checkCurrentId;
    @Override
    protected View initView() {
    View view1= View.inflate(mActivity, R.layout.content, null);
        //ViewUtils工具的注入
    ViewUtils.inject(this, view1);
        return view1;
    }
    @Override
    protected void initData() {
        //初始化数据
        mList=new ArrayList<TabBasePager>();
        //加载数据TODO 添加主页面viewpager
        mList.add(new TabHomePager(mActivity));
        mList.add(new TabNewCenterPager(mActivity));
        mList.add(new TabSmasterservicePager(mActivity));
        mList.add(new TabGovPager(mActivity));
        mList.add(new TabSettingPager(mActivity));
        //加载数据
        mPager.setAdapter(new ViewPagerAdapter());

        //设置RadioGroup的点击事件
        mRadioGroup.setOnCheckedChangeListener(this);

        //给RadioGroup设置默认值
        mRadioGroup.check(R.id.tab_home);

        checkCurrentId = 0;
    }
    //viewpager的的适配器
     class ViewPagerAdapter extends PagerAdapter{
         //返回集合大小
        @Override
        public int getCount()
        {
            if(mList!=null){
                return mList.size();
            }
            return 0;
        }
        @Override
        public boolean isViewFromObject(View arg0, Object arg1)
        {
            return arg0==arg1;
        }
        //销毁一个页卡
        @Override
        public void destroyItem(ViewGroup container, int position, Object object)
        {
            Log.i(tag, "销毁的是第"+position+"个页面");
            container.removeView((View) object);
        }
        //实例化一个页卡
        @Override
        public Object instantiateItem(ViewGroup container, int position)
        {
            Log.i(tag, "加载的是第"+position+"个页面");
            TabBasePager pager=mList.get(position);
            View view=pager.getRootView();
            //viewpager需要存放视图
            container.addView(view);
            //给页面控制器加载数据
            pager.initData();
            return view;
        }
    }
     /**
      * 将五个页面分别和下面五个tab关联起来
      */
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId)
    {

        switch(checkedId){
            case R.id.tab_home:
                checkCurrentId=0;
                setSlindingMenu(false);
                break;
            case R.id.tab_news:
                checkCurrentId=1;
                setSlindingMenu(true);
                break;
            case R.id.tab_smaster:
                checkCurrentId=2;
                setSlindingMenu(true);
                break;
            case R.id.tab_gov:
                checkCurrentId=3;
                setSlindingMenu(true);
                break;
            case R.id.tab_setting:
                checkCurrentId=4;
                setSlindingMenu(false);
                break;

        }
        //给viewpager设置选中的页面
        mPager.setCurrentItem(checkCurrentId);
    }
    /**
     * 设置menu是否可见即是否能否侧滑
     * @param enable
     */
    public void setSlindingMenu(boolean enable){
        MainUIActivity mainui=(MainUIActivity) mActivity;
        SlidingMenu menu=mainui.getSlidingMenu();
        menu.setTouchModeAbove(enable ? SlidingMenu.TOUCHMODE_FULLSCREEN:SlidingMenu.TOUCHMODE_NONE);

    }
    /**
     * 改变菜单对应的显示页面
     * @param mCurrent
     */
    public void switchMenuPager(int position)
    {
        //获得显示切换的实例
          TabBasePager tabPager=mList.get(checkCurrentId);
          //调用切换菜单显示主页的内容区域
          tabPager.switchMenuPager(position);

    }
}

相关文章

网友评论

      本文标题:Android之智慧北京一

      本文链接:https://www.haomeiwen.com/subject/bqwlvttx.html