基于FlycoTabLayout实现CommonTabLayout支持网络图片

345 阅读1分钟

基于FlycoTabLayout实现CommonTabLayout支持网络图片

  • 修改CommonTabLayout部分代码

public class CommonTabLayout extends FrameLayout implements ValueAnimator.AnimatorUpdateListener {
    
    //自定义图片加载器
    private XWTabLayoutLoader mLoader;
    
    public CommonTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setWillNotDraw(false);//重写onDraw方法,需要调用这个方法来清除flag
        setClipChildren(false);
        setClipToPadding(false);

        mLoader = XWTabLayout.getXWTabLayoutConfig().getXWTabLayoutLoader();
        //省略部分代码
    }
    
    /** 创建并添加tab */
    private void addTab(final int position, View tabView) {
        TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title);
        tv_tab_title.setText(mTabEntitys.get(position).getTabTitle());
        ImageView iv_tab_icon = (ImageView) tabView.findViewById(R.id.iv_tab_icon);
        //注释掉原先的代码
        //iv_tab_icon.setImageResource(mTabEntitys.get(position).getTabUnselectedIcon());
        loadImageViewData(true, mTabEntitys.get(position), iv_tab_icon);

        tabView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = (Integer) v.getTag();
                if (mCurrentTab != position) {
                    setCurrentTab(position);
                    if (mListener != null) {
                        mListener.onTabSelect(position);
                    }
                } else {
                    if (mListener != null) {
                        mListener.onTabReselect(position);
                    }
                }
            }
        });
        
    private void updateTabStyles() {
        for (int i = 0; i < mTabCount; i++) {
            final boolean isSelect = i == mCurrentTab;
            View tabView = mTabsContainer.getChildAt(i);
            tabView.setPadding((int) mTabPadding, 0, (int) mTabPadding, 0);
            TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title);
            tv_tab_title.setTextColor(isSelect ? mTextSelectColor : mTextUnselectColor);
            tv_tab_title.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextsize);
//            tv_tab_title.setPadding((int) mTabPadding, 0, (int) mTabPadding, 0);
            if (mTextAllCaps) {
                tv_tab_title.setText(tv_tab_title.getText().toString().toUpperCase());
            }

            if (mTextBold == TEXT_BOLD_BOTH) {
                tv_tab_title.getPaint().setFakeBoldText(true);
            } else if (mTextBold == TEXT_BOLD_NONE) {
                tv_tab_title.getPaint().setFakeBoldText(false);
            }

            ImageView iv_tab_icon = (ImageView) tabView.findViewById(R.id.iv_tab_icon);
            if (mIconVisible) {
                iv_tab_icon.setVisibility(View.VISIBLE);
                CustomTabEntity tabEntity = mTabEntitys.get(i);
                //注释掉原先的代码
                //iv_tab_icon.setImageResource(isSelect ? tabEntity.getTabSelectedIcon() : tabEntity.getTabUnselectedIcon());
                loadImageViewData(isSelect, tabEntity, iv_tab_icon);

                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                        mIconWidth <= 0 ? LinearLayout.LayoutParams.WRAP_CONTENT : (int) mIconWidth,
                        mIconHeight <= 0 ? LinearLayout.LayoutParams.WRAP_CONTENT : (int) mIconHeight);
                if (mIconGravity == Gravity.LEFT) {
                    lp.rightMargin = (int) mIconMargin;
                } else if (mIconGravity == Gravity.RIGHT) {
                    lp.leftMargin = (int) mIconMargin;
                } else if (mIconGravity == Gravity.BOTTOM) {
                    lp.topMargin = (int) mIconMargin;
                } else {
                    lp.bottomMargin = (int) mIconMargin;
                }

                iv_tab_icon.setLayoutParams(lp);
            } else {
                iv_tab_icon.setVisibility(View.GONE);
            }
        }
    }
    
    private void updateTabSelection(int position) {
        for (int i = 0; i < mTabCount; ++i) {
            View tabView = mTabsContainer.getChildAt(i);
            final boolean isSelect = i == position;
            TextView tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title);
            tab_title.setTextColor(isSelect ? mTextSelectColor : mTextUnselectColor);
            ImageView iv_tab_icon = (ImageView) tabView.findViewById(R.id.iv_tab_icon);
            CustomTabEntity tabEntity = mTabEntitys.get(i);
            //注释掉原先的代码
            //iv_tab_icon.setImageResource(isSelect ? tabEntity.getTabSelectedIcon() : tabEntity.getTabUnselectedIcon());
            loadImageViewData(isSelect, tabEntity, iv_tab_icon);

            if (mTextBold == TEXT_BOLD_WHEN_SELECT) {
                tab_title.getPaint().setFakeBoldText(isSelect);
            }
        }
    }
    
    /**
     * 判断是否加载本地图片还是网络图片
     *
     * @param isSelect
     * @param tabEntity
     * @param imageView
     */
    private void loadImageViewData (boolean isSelect, CustomTabEntity tabEntity, ImageView imageView) {
        if (TextUtils.isEmpty(tabEntity.getTabSelectUrl()) ||
                TextUtils.isEmpty(tabEntity.getTabUnSelectUrl())) {
            imageView.setImageResource(isSelect ? tabEntity.getTabUnselectedIcon() : tabEntity.getTabUnselectedIcon());
        }else {
            if (mLoader != null) {
                mLoader.load(mContext, imageView, isSelect ? tabEntity.getTabSelectUrl() : tabEntity.getTabUnSelectUrl());
            }
        }
    }
}

相应的代码已上传了,需要的童鞋可以去下载XWTabLayout查看, 如果对你有帮助,请点个👍