设为首页 加入收藏

TOP

Android防微信首页左右滑动切换(二)
2017-10-13 10:30:50 】 浏览:684
Tags:Android 首页 左右 滑动 切换
ew[index]
= tabView; /*tabIconView初始化*/ TabIconView iconView = null; if (mIconVIewId > 0) { // 传入的图片资源文件ID不为0时,表示需要显示icon,然后初始化该View iconView = (TabIconView) tabView.findViewById(mIconVIewId); iconView.init(mIconRes[index][0], mIconRes[index][1], mIconWidth, mIconHeight); //这里调了自定义ImageView的init方法 } /*tabTextView初始化*/ TextView textView = null; if (mTextViewId > 0) { textView = (TextView) tabView.findViewById(mTextViewId); textView.setText(mTitles[index]); } /*设置宽度,等分container*/ LayoutParams lp = (LayoutParams) tabView.getLayoutParams(); lp.width = 0; lp.weight = 1; /*添加tab点击事件*/ addTabOnClickListener(tabView, index); /*设置当前状态*/ if (index == mViewPager.getCurrentItem()) { //当先显示tab,设置初始状态为获得焦点状态 if (iconView != null) { iconView.offsetChanged(0); } tabView.setSelected(true); if (textView != null) { textView.setTextColor(mTextSelectedColor); } } addView(tabView); } }

 

  3).监听viewPager的滑动事件,根据偏移值更新container,完成重绘操作

 

  4).在container的onDraw中根据偏移量计算透明值,这里文本偏移值计算用了一个开源的代码

   

@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        final int childCount = getChildCount();
        if (childCount > 0) {
            /*当发生偏移时,绘制渐变区域*/
            if (mSelectionOffset > 0f && mSelectedPosition < (getChildCount() - 1) && mShowTransitionColor) {

                /*获取当前tab和下一tab view */
                View selectedTab = getChildAt(mSelectedPosition);
                View nextTab = getChildAt(mSelectedPosition + 1);

                /*显示tab icon时,刷新各自view 透明度*/
                if (mIconVIewId > 0) {
                    View selectedIconView = selectedTab.findViewById(mIconVIewId);
                    View nextIconView = nextTab.findViewById(mIconVIewId);

                    //draw icon alpha
                    if (selectedIconView instanceof TabIconView && nextIconView instanceof TabIconView) {
                        ((TabIconView) selectedIconView).offsetChanged(mSelectionOffset);
                        ((TabIconView) nextIconView).offsetChanged(1 - mSelectionOffset);
                    }
                }

                 /*显示tab text,刷新各自view 透明度*/
                if  (mTextViewId > 0) {
                    View selectedTextView = selectedTab.findViewById(mTextViewId);
                    View nextTextView = nextTab.findViewById(mTextViewId);

                    //draw text color
                    Integer selectedColor = (Integer) eva luate(mSelectionOffset, mTextSelectedColor, mTextNormalColor);
                    Integer nextColor = (Integer) eva luate(1 - mSelectionOffset, mTextSelectedColor, mTextNormalColor);

                    if (selectedTextView instanceof TextView && nextTextView instanceof TextView) {
                        ((TextView) selectedTextView).setTextColor(selectedColor);
                        ((TextView) nextTextView).setTextColor(nextColor);
                    }
                }

            }
        }
    }

 

3.定义个FragmentAdapter,这个就略过,比较简单了

4.做了以上准备工作,就可以写个测试例子试试效果了,当然这里为了看到效果,我们需要事先准备好几张图片,以及几个fragment

    private void initViews() {
//得到apdater TabFragmentAdapter mAdapter
= new TabFragmentAdapter(getSupportFragmentManager(), fragments); ViewPager mPager = (ViewPager) findViewById(R.id.tab_pager); mPager.setAdapter(mAdapter);
//如果当前类需要对viewPager做监听 TabContainerView mTabLayout
= (TabContainerView) findViewById(R.id.ll_tab_container); mTabLayout.setOnPageChangeListener(this); mTabLayout.initContainer(getResources().getStringArray(R.array.tab_main_title), ICONS_RES, TAB_COLORS, true); int width = getResources().getDimensionP
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇优质Android小部件:索尼滚动相册 下一篇在eclipse中安装上genymotion插件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目