android 底部标签栏CommonTabLayout搭建项目底部菜单(带消息提醒)

本文介绍了如何使用CommonTabLayout在Android项目中搭建底部标签栏,并实现消息提示功能。详细讲解了各个组件的设置和交互,包括文字、图标、选中状态的处理,以及指示器的动画效果。
摘要由CSDN通过智能技术生成

}

});

/** 每一个Tab的布局参数 */

LinearLayout.LayoutParams lp_tab = mTabSpaceEqual ?

new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f) :

new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);

if (mTabWidth > 0) {

lp_tab = new LinearLayout.LayoutParams((int) mTabWidth, LayoutParams.MATCH_PARENT);

}

mTabsContainer.addView(tabView, position, lp_tab);

}

private void updateTabStyles() {

for (int i = 0; i < mTabCount; i++) {

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(i == mCurrentTab ? 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(i == mCurrentTab ? tabEntity.getTabSelectedIcon() : tabEntity.getTabUnselectedIcon());

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());

if (mTextBold == TEXT_BOLD_WHEN_SELECT) {

tab_title.getPaint().setFakeBoldText(isSelect);

}

}

}

private void calcOffset() {

final View currentTabView = mTabsContainer.getChildAt(this.mCurrentTab);

mCurrentP.left = currentTabView.getLeft();

mCurrentP.right = currentTabView.getRight();

final View lastTabView = mTabsContainer.getChildAt(this.mLastTab);

mLastP.left = lastTabView.getLeft();

mLastP.right = lastTabView.getRight();

// Log.d(“AAA”, “mLastP—>” + mLastP.left + “&” + mLastP.right);

// Log.d(“AAA”, “mCurrentP—>” + mCurrentP.left + “&” + mCurrentP.right);

if (mLastP.left == mCurrentP.left && mLastP.right == mCurrentP.right) {

invalidate();

} else {

mValueAnimator.setObjectValues(mLastP, mCurrentP);

if (mIndicatorBounceEnable) {

mValueAnimator.setInterpolator(mInterpolator);

}

if (mIndicatorAnimDuration < 0) {

mIndicatorAnimDuration = mIndicatorBounceEnable ? 500 : 250;

}

mValueAnimator.setDuration(mIndicatorAnimDuration);

mValueAnimator.start();

}

}

private void calcIndicatorRect() {

View currentTabView = mTabsContainer.getChildAt(this.mCurrentTab);

float left = currentTabView.getLeft();

float right = currentTabView.getRight();

mIndicato

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值