本文仅做记录成长!

我的要求不高,每天进步一点点就好!相信努力总能得到回报,即使只是一点点!

通过微信截图,抠出了几个需要的素材

android仿微信右侧 android 仿微信_ide

然后开始搞事情了!

首先制作UI的顶部,没啥特别的(top.xml)

android仿微信右侧 android 仿微信_android仿微信右侧_02

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal"
    android:background="#303030">
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="center_vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:text="微信"
        android:textColor="#FFF"
        android:textStyle="bold"
        android:textSize="18dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:layout_gravity="center_vertical">
        <ImageView
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:background="@drawable/select_icon"/>
        <ImageView
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:background="@drawable/jia_icon"/>
    </LinearLayout>
</LinearLayout>

然后有头当然得有尾,顺便把底部布局也添加了(bottom.xml)

android仿微信右侧 android 仿微信_Android_03

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:orientation="horizontal">

    <LinearLayout
        android:id="@+id/tab01"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">
        <ImageView
            android:id="@+id/chat_img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/chat_back"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="聊天"/>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/tab02"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">
        <ImageView
            android:id="@+id/address_img"
            android:layout_marginTop="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/address_back"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="通讯录"/>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/tab03"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">
        <ImageView
            android:id="@+id/found_img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/found_back"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="发现"/>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/tab04"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">
        <ImageView
            android:id="@+id/my_img"
            android:layout_marginTop="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/my_back"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我"/>
    </LinearLayout>
</LinearLayout>

头尾都好了,接下来就是中间的ViewPager部分了(MainActivity.xml)

用include加载头部尾部

然后添加一个ViewPager和一个ImageView填充一条细细的线

android仿微信右侧 android 仿微信_Android_04

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/top"/>
        <android.support.v4.view.ViewPager
            android:id="@+id/viewPager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">
        </android.support.v4.view.ViewPager>
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#d7d7d7"/>
    <include layout="@layout/buttom"/>
</LinearLayout>

当然那些添加好之后,还得给ViePager添加一些料,添加4个布局文件,对应4个底部菜单,当然这些料都是比较简单的!

4个Layout除了android:text 内容不同之外其余相同,所以就省略咯!

android仿微信右侧 android 仿微信_xml_05

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:textSize="50dp"
        android:text="聊天"/>
</LinearLayout>



UI都勉强的弄好了~当然是给里面加点料了!

在MainActivity中先做声明

private ViewPager viewPager;
    private List<View> list;//存放ViawPage的View
    //底部菜单的图片
    private ImageView chat_img;
    private ImageView address_img;
    private ImageView found_img;
    private ImageView my_img;
    //底部每个菜单对应的LinearLayout
    private LinearLayout tab01;
    private LinearLayout tab02;
    private LinearLayout tab03;
    private LinearLayout tab04;

创建一个初始化控件的方法initView:

//初始化控件
    private void initView() {
        viewPager = findViewById(R.id.viewPager);
        //实例化底部按钮图片
        chat_img = findViewById(R.id.chat_img);
        address_img = findViewById(R.id.address_img);
        found_img = findViewById(R.id.found_img);
        my_img = findViewById(R.id.my_img);
        chat_img.setImageResource(R.drawable.chat_select);
        //实例化底部LinearLayout
        tab01 = findViewById(R.id.tab01);
        tab02 = findViewById(R.id.tab02);
        tab03 = findViewById(R.id.tab03);
        tab04 = findViewById(R.id.tab04);

    }

创建一个底部图标默认为未选中的方法:

//默认底部Icon为未选中状态
    public void initIcon(){
        chat_img.setImageResource(R.drawable.chat_back);
        address_img.setImageResource(R.drawable.address_back);
        found_img.setImageResource(R.drawable.found_back);
        my_img.setImageResource(R.drawable.my_back);
    }



创建一个方法加载Layout到ViewPager,同时实现了底部菜单图标跟随滑动而变成选中的状态(loading)

//ViewPager加载布局
    private void loading() {
        //实例化集合
        list = new ArrayList<View>();
        //布局转为View 放入集合
        LayoutInflater inflater = LayoutInflater.from(this);
        View tab01 = inflater.inflate(R.layout.tab01,null);
        View tab02 = inflater.inflate(R.layout.tab02,null);
        View tab03 = inflater.inflate(R.layout.tab03,null);
        View tab04 = inflater.inflate(R.layout.tab04,null);
        //View加入集合
        list.add(tab01);
        list.add(tab02);
        list.add(tab03);
        list.add(tab04);

        //创建适配器
        PagerAdapter adapter = new PagerAdapter() {
            //初始化适配器存入Vied
            @NonNull
            @Override
            public Object instantiateItem(@NonNull ViewGroup container, int position) {
                container.addView(list.get(position));
                return list.get(position);
            }
            //销毁View
            @Override
            public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
                container.removeView(list.get(position));
            }
            //滑动的VIew的个数
            @Override
            public int getCount() {
                return list.size();
            }


            @Override
            public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
                return view == object;
            }
        };
        //viewPager加载适配器
        viewPager.setAdapter(adapter);
        
        //viewPager滑动监听事件
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                switch(position){
                    case 0:
                        initIcon();//调用方法,默认底部菜单全部设置为未选中
                        chat_img.setImageResource(R.drawable.chat_select);
                        break;
                    case 1:
                        initIcon();
                        address_img.setImageResource(R.drawable.address_sele);
                        break;
                    case 2:
                        initIcon();
                        found_img.setImageResource(R.drawable.found_select);
                        break;
                    case 3:
                        initIcon();
                        my_img.setImageResource(R.drawable.my_sele);
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

到目前为止已经实现了 基本想要的功能了,但是底部菜单的点击还是没效果的!所以得添加多一个方法,让底部的菜单也能物尽其用(bottomOnClick),MainActivity需要实现按钮监听事件 implements View.OnClickListener,实现onClick类!

//底部按钮
    private void bottomOnClick() {
        tab01.setOnClickListener(this);
        tab02.setOnClickListener(this);
        tab03.setOnClickListener(this);
        tab04.setOnClickListener(this);
    }


//监听底部按钮,切换页面和改变底部图标样式
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.tab01:
                //切换到第一页
                viewPager.setCurrentItem(0);
                //图标默认全部未选中
                initIcon();
                //更改为选择的图标样式
                chat_img.setImageResource(R.drawable.chat_select);
                break;
            case R.id.tab02:
                viewPager.setCurrentItem(1);
                initIcon();
                address_img.setImageResource(R.drawable.address_sele);
                break;
            case R.id.tab03:
                viewPager.setCurrentItem(2);
                initIcon();
                found_img.setImageResource(R.drawable.found_select);
                break;
            case R.id.tab04:
                viewPager.setCurrentItem(3);
                initIcon();
                my_img.setImageResource(R.drawable.my_sele);
                break;
        }
    }

当然我们还需要调用方法和把原有默认的标题栏去掉,在onCreate操作:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 
        setContentView(R.layout.activity_main);
        initView();
        loading();
        bottomOnClick();
    }



好了!终于是完成了。看看成果的时候到了!

android仿微信右侧 android 仿微信_ide_06