美文网首页
自定义一个通用的底部导航栏

自定义一个通用的底部导航栏

作者: cao苗子 | 来源:发表于2019-09-29 13:59 被阅读0次

1.使用代码:

public class MainActivity extends AppCompatActivity {
    private List<BottomNavigationBar.BottomItem> bottomItemList = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        bottomItemList.add(
                new BottomNavigationBar.BottomItem("首页",R.mipmap.shouye_false,R.mipmap.shouye_true));
        bottomItemList.add(
                new BottomNavigationBar.BottomItem("商城",R.mipmap.gongju_false,R.mipmap.gongju_true));
        bottomItemList.add(
                new BottomNavigationBar.BottomItem("我的",R.mipmap.my_false,R.mipmap.my_true));

        final BottomNavigationBar navigationBar = findViewById(R.id.bottom);

        navigationBar.addBottomItem(bottomItemList);
        navigationBar.setImageViewSize(25);
        navigationBar.setTextSize(15);
        navigationBar.setSelectPosition(1);
        navigationBar.setSelectedTextColor(Color.BLUE);

        navigationBar.setItemOnClickListener(new BottomNavigationBar.OnClickItemListener() {
            @Override
            public void itemClick(BottomNavigationBar.BottomItem item,int position) {

            }
        });
    }
}

2.主要代码:BottomNavigationBar

package com.miaozi.demo10;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;

/**
 * created by panshimu
 * on 2019/9/2
 */
public class BottomNavigationBar extends LinearLayout {
    private List<BottomItem> mBottomItemList;
    private int mUnselectedTextColor = Color.GRAY;
    private int mSelectedTextColor = Color.RED;
    private int mCurrentPosition = -1;
    private int mTextSize = 15;
    private int mBackGroupColor = Color.WHITE;
    private int mImageViewSize = ViewGroup.LayoutParams.WRAP_CONTENT;
    private int mMargin = 10;
    private int mTopLineColor = Color.GRAY;
    private int mTopLineWidth = 1;
    private Paint mPaint;

    public BottomNavigationBar(Context context) {
        this(context,null);
    }

    public BottomNavigationBar(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public BottomNavigationBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setOrientation(HORIZONTAL);
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setStrokeWidth(mTopLineWidth);
        mPaint.setColor(mTopLineColor);
        mPaint.setDither(true);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);
        canvas.drawLine(0,0,getMeasuredWidth(),0,mPaint);
    }

    private void initLayout() {
        if(mBottomItemList == null && mBottomItemList.size() == 0)
            return;
        removeAllViews();
        for (int i = 0 ; i < mBottomItemList.size() ; i++ ){
            initItem(i,mBottomItemList.get(i));
        }
        setSelectPosition(0);
    }

    public void setUnselectedTextColor(int color){
         this.mUnselectedTextColor = color;
         if(mBottomItemList.size() > 0 && mCurrentPosition >= 0){
             mBottomItemList.get(mCurrentPosition).getTextView().setTextColor(color);
         }
    }

    public void setSelectedTextColor(int color){
        this.mSelectedTextColor = color;
        if(mBottomItemList.size() > 0 && mCurrentPosition >= 0){
            mBottomItemList.get(mCurrentPosition).getTextView().setTextColor(color);
        }
    }

    public void setTextSize(int size){
        this.mTextSize = size;
        for(BottomItem item : mBottomItemList){
            item.getTextView().setTextSize(size);
        }
    }

    public void setImageViewSize(int size){
        this.mImageViewSize = size;
        for(BottomItem item : mBottomItemList){
            ViewGroup.LayoutParams lp = item.getImageView().getLayoutParams();
            lp.width = dp2px(size);
            lp.height = lp.width;
            item.getImageView().setLayoutParams(lp);
        }
    }

    public void setBackGroupColor(int color){
        this.mBackGroupColor = color;
        for(BottomItem item : mBottomItemList){
            item.getContentView().setBackgroundColor(color);
        }
    }

    private void initItem(final int position, BottomItem item){

        LinearLayout ll = new LinearLayout(getContext());
        ll.setOrientation(VERTICAL);
        ll.setGravity(Gravity.CENTER);
        LayoutParams params = new LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT);
        params.weight = 1;
        ll.setLayoutParams(params);

        TextView tv = new TextView(getContext());
        LayoutParams lpTv = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        lpTv.bottomMargin = mMargin;
        tv.setLayoutParams(lpTv);
        tv.setText(item.getText());
        tv.setTextColor(mUnselectedTextColor);
        tv.setTextSize(mTextSize);

        ImageView iv = new ImageView(getContext());
        LayoutParams lpIv = new LayoutParams(mImageViewSize, mImageViewSize);
        lpIv.topMargin = mMargin;
        iv.setLayoutParams(lpIv);
        iv.setImageResource(item.getUnselectedResId());

        item.setTextView(tv);
        item.setImageView(iv);

        ll.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                setSelectPosition(position);
            }
        });

        item.setContentView(ll);

        ll.addView(iv);
        ll.addView(tv);

        ll.setBackgroundColor(mBackGroupColor);

        addView(ll);

    }

    public void setSelectPosition(int position){

        if( position<0 || position > mBottomItemList.size() || position == mCurrentPosition){
            return;
        }

        if(mCurrentPosition >= 0) {
            BottomItem bottomItem = mBottomItemList.get(mCurrentPosition);
            bottomItem.getImageView().setImageResource(mBottomItemList.get(mCurrentPosition).getUnselectedResId());
            bottomItem.getTextView().setTextColor(mUnselectedTextColor);
        }

        BottomItem bi = mBottomItemList.get(position);
        bi.getImageView().setImageResource(mBottomItemList.get(position).getSelectedResId());
        bi.getTextView().setTextColor(mSelectedTextColor);

        mCurrentPosition = position;
        if(mItemClick != null){
            mItemClick.itemClick(mBottomItemList.get(position),position);
        }

    }

    private int dp2px(int mImageViewSize) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,mImageViewSize,getContext().getResources().getDisplayMetrics());
    }

    public void addBottomItem(List<BottomItem> list){
        if(mBottomItemList != null){
           mBottomItemList.clear();
        }
        mBottomItemList = list;
        initLayout();
    }
    private OnClickItemListener mItemClick;
    public void setItemOnClickListener(OnClickItemListener clickListener){
        this.mItemClick = clickListener;
    }
    public interface OnClickItemListener{
        void itemClick(BottomItem item,int position);
    }

    public static class BottomItem{
        private String text;
        private int unselectedResId;
        private int selectedResId;
        private TextView textView;
        private ImageView imageView;
        private ViewGroup contentView;

        public ViewGroup getContentView() {
            return contentView;
        }

        public void setContentView(ViewGroup contentView) {
            this.contentView = contentView;
        }

        public TextView getTextView() {
            return textView;
        }

        public void setTextView(TextView textView) {
            this.textView = textView;
        }

        public ImageView getImageView() {
            return imageView;
        }

        public void setImageView(ImageView imageView) {
            this.imageView = imageView;
        }

        public BottomItem(String text, int unselectedResId, int selectedResId) {
            this.text = text;
            this.unselectedResId = unselectedResId;
            this.selectedResId = selectedResId;
        }

        public String getText() {
            return text;
        }

        public void setText(String text) {
            this.text = text;
        }

        public int getUnselectedResId() {
            return unselectedResId;
        }

        public void setUnselectedResId(int unselectedResId) {
            this.unselectedResId = unselectedResId;
        }

        public int getSelectedResId() {
            return selectedResId;
        }

        public void setSelectedResId(int selectedResId) {
            this.selectedResId = selectedResId;
        }
    }
}

代码很简单,相信大家一看就懂

相关文章

网友评论

      本文标题:自定义一个通用的底部导航栏

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