两种均模仿了微信6.0底部菜单栏的效果,第一种在左右滑动的时候有动画,第二种没有,首先看第一种:

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:im="http://schemas.android.com/apk/res/com.dystu.impro"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#f2f0eb"android:orientation="vertical" ><android.support.v4.view.ViewPagerandroid:id="@+id/id_viewpager"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1" ></android.support.v4.view.ViewPager><Viewandroid:id="@+id/line"android:layout_width="match_parent"android:layout_height="1px"android:layout_above="@id/main_bottom"android:background="#22000000" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="60dp"android:background="@drawable/tabbg"android:orientation="horizontal" ><com.dystu.impro.widget.ChangeColorIconWithTextViewandroid:id="@+id/id_indicator_one"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:padding="5dp"im:icon="@drawable/aio"im:text="超信"im:text_size="12sp" /><com.dystu.impro.widget.ChangeColorIconWithTextViewandroid:id="@+id/id_indicator_two"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:padding="5dp"im:icon="@drawable/aim"im:text="通讯录"im:text_size="12sp" /><com.dystu.impro.widget.ChangeColorIconWithTextViewandroid:id="@+id/id_indicator_three"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:padding="5dp"im:icon="@drawable/aiq"im:text="发现"im:text_size="12sp" /><com.dystu.impro.widget.ChangeColorIconWithTextViewandroid:id="@+id/id_indicator_four"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:padding="5dp"im:icon="@drawable/ais"im:text="设置"im:text_size="12sp" /></LinearLayout></LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<resources><attr name="icon" format="reference" /><attr name="color" format="color" /><attr name="text" format="string" /><attr name="text_size" format="dimension" /><declare-styleable name="ChangeColorIconView"><attr name="icon" /><attr name="color" /><attr name="text" /><attr name="text_size" /></declare-styleable></resources>

注意命名空间的写法。图片资源可以下载微信的apk文件,解压缩,在文件r下的子文件q下有资源图片。

类:

package com.dystu.impro.activity;import java.util.ArrayList;
import java.util.List;import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;import com.dystu.impro.R;
import com.dystu.impro.fragment.ChatAllHistoryFragment;
import com.dystu.impro.fragment.ContactlistFragment;
import com.dystu.impro.fragment.FindFragment;
import com.dystu.impro.fragment.SettingsFragment;
import com.dystu.impro.widget.ChangeColorIconWithTextView;/*** * 测试微信的底部菜单栏使用* * @author**/public class CopyOfMainActivity extends BaseActivity implementsOnPageChangeListener,OnClickListener{private ViewPager mViewPager;private List<Fragment> mTabs = new ArrayList<Fragment>();private FragmentPagerAdapter mAdapter;private List<ChangeColorIconWithTextView> mTabIndicator = new ArrayList<ChangeColorIconWithTextView>();private ContactlistFragment contactListFragment;private ChatAllHistoryFragment chatHistoryFragment;private SettingsFragment settingFragment;private FindFragment findFragment;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.copyofactivity_main);mViewPager = (ViewPager) findViewById(R.id.id_viewpager);initDatas();mViewPager.setAdapter(mAdapter);mViewPager.setOnPageChangeListener(this);}private void initDatas() {contactListFragment = new ContactlistFragment();chatHistoryFragment = new ChatAllHistoryFragment();settingFragment = new SettingsFragment();findFragment = new FindFragment();mTabs.add(chatHistoryFragment);mTabs.add(contactListFragment);mTabs.add(findFragment);mTabs.add(settingFragment);mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()){@Overridepublic int getCount(){return mTabs.size();}@Overridepublic Fragment getItem(int arg0){return mTabs.get(arg0);}};initTabIndicator();}private void initTabIndicator() {ChangeColorIconWithTextView one = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_one);ChangeColorIconWithTextView two = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_two);ChangeColorIconWithTextView three = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_three);ChangeColorIconWithTextView four = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_four);mTabIndicator.add(one);mTabIndicator.add(two);mTabIndicator.add(three);mTabIndicator.add(four);one.setOnClickListener(this);two.setOnClickListener(this);three.setOnClickListener(this);four.setOnClickListener(this);one.setIconAlpha(1.0f);}@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {if (positionOffset > 0){ChangeColorIconWithTextView left = mTabIndicator.get(position);ChangeColorIconWithTextView right = mTabIndicator.get(position + 1);left.setIconAlpha(1 - positionOffset);right.setIconAlpha(positionOffset);}}@Overridepublic void onPageSelected(int arg0) {}@Overridepublic void onClick(View v) {resetOtherTabs();switch (v.getId()){case R.id.id_indicator_one:mTabIndicator.get(0).setIconAlpha(1.0f);mViewPager.setCurrentItem(0, false);break;case R.id.id_indicator_two:mTabIndicator.get(1).setIconAlpha(1.0f);mViewPager.setCurrentItem(1, false);break;case R.id.id_indicator_three:mTabIndicator.get(2).setIconAlpha(1.0f);mViewPager.setCurrentItem(2, false);break;case R.id.id_indicator_four:mTabIndicator.get(3).setIconAlpha(1.0f);mViewPager.setCurrentItem(3, false);break;}}/*** 重置其他的Tab*/private void resetOtherTabs(){for (int i = 0; i < mTabIndicator.size(); i++){mTabIndicator.get(i).setIconAlpha(0);}}}

四个Fragment差不多一样:(举一个例子)

package com.dystu.impro.fragment;import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;public class ChatAllHistoryFragment extends Fragment{@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {TextView textView = new TextView(getActivity());textView.setTextSize(20);textView.setBackgroundColor(Color.parseColor("#ffffffff"));textView.setGravity(Gravity.CENTER);textView.setText("ChatAllHistoryFragment");return textView;}}

效果图:

第二种:

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/mainLayout"android:background="#f2f0eb"android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayoutandroid:id="@+id/main_bottom"android:layout_width="match_parent"android:layout_height="52dp"android:layout_alignParentBottom="true"android:background="#FCFCFC"android:gravity="center_vertical"android:orientation="horizontal" ><RelativeLayoutandroid:id="@+id/btn_container_conversation"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1" ><Buttonandroid:id="@+id/btn_conversation"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@null"android:drawableTop="@drawable/tab_chat_bg"android:onClick="onTabClicked"android:paddingBottom="2dip"android:paddingTop="7dip"android:scaleType="matrix"android:text="超信"android:textColor="#88000000"android:textSize="12sp" /><TextViewandroid:id="@+id/unread_msg_number"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="10dp"android:background="@drawable/unread_count_bg"android:gravity="center"android:text="7"android:layout_marginTop="5dp"android:textColor="@android:color/white"android:textSize="12sp"android:visibility="visible" /><!-- android:visibility="invisible" --></RelativeLayout><RelativeLayoutandroid:id="@+id/btn_container_address_list"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1" ><Buttonandroid:textColor="#88000000"android:id="@+id/btn_address_list"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@null"android:drawableTop="@drawable/tab_contact_list_bg"android:onClick="onTabClicked"android:paddingBottom="2dip"android:paddingTop="7dip"android:scaleType="matrix"android:text="通讯录"android:textSize="12sp" /><TextViewandroid:id="@+id/unread_address_number"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="10dp"android:background="@drawable/unread_count_bg"android:gravity="center"android:text="7"android:layout_marginTop="5dp"android:textColor="@android:color/white"android:textSize="12sp"android:visibility="visible" /><!-- android:visibility="invisible" --></RelativeLayout><RelativeLayoutandroid:id="@+id/btn_container_find"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1" ><Buttonandroid:textColor="#88000000"android:id="@+id/btn_find_list"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@null"android:drawableTop="@drawable/tab_find_bg"android:onClick="onTabClicked"android:paddingBottom="2dip"android:paddingTop="7dip"android:scaleType="matrix"android:text="发现"android:textSize="12sp" /><TextViewandroid:id="@+id/unread_find_number"android:layout_width="10dp"android:layout_height="10dp"android:layout_alignParentRight="true"android:layout_marginRight="18dp"android:layout_marginTop="5dp"android:background="@drawable/afv"android:gravity="center"android:textColor="@android:color/white"android:textSize="12sp"android:visibility="visible" /></RelativeLayout><RelativeLayoutandroid:id="@+id/btn_container_setting"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1" ><Buttonandroid:textColor="#88000000"android:id="@+id/btn_setting"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@null"android:drawableTop="@drawable/tab_setting_bg"android:onClick="onTabClicked"android:paddingBottom="2dip"android:paddingTop="7dip"android:scaleType="matrix"android:text="设置"android:textSize="12sp" /></RelativeLayout></LinearLayout><!--  <RelativeLayoutandroid:id="@+id/fragment_container"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@id/main_bottom" /> --><View  android:id="@+id/line"  android:layout_width="match_parent"  android:layout_height="1px"  android:layout_above="@id/main_bottom"  android:background="#22000000" />  <android.support.v4.view.ViewPager  android:id="@+id/content_pager"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:layout_above="@id/line"  android:fadingEdge="none"  android:overScrollMode="never" >  </android.support.v4.view.ViewPager>  </RelativeLayout>

类:

package com.dystu.impro.activity;import java.util.ArrayList;import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;import com.dystu.impro.R;
import com.dystu.impro.fragment.ChatAllHistoryFragment;
import com.dystu.impro.fragment.ContactlistFragment;
import com.dystu.impro.fragment.FindFragment;
import com.dystu.impro.fragment.SettingsFragment;public class MainActivity extends BaseActivity {protected static final String TAG = "MainActivity";// ========================================================================private View btn_container_conversation, btn_container_address_list,btn_container_find, btn_container_setting;private Button btn_conversation, btn_address_list, btn_find_list,btn_setting;// ====================底部菜单栏的提醒,默认是不可见的================================// 未读消息textviewprivate TextView unreadLabel;// 未读通讯录textviewprivate TextView unreadAddressLable;// "发现"的小圆点private TextView unreadFindNumber;// ===========================================================// ====================新的Fragment=================================private ContactlistFragment contactListFragment;private ChatAllHistoryFragment chatHistoryFragment;private SettingsFragment settingFragment;private FindFragment findFragment;// ============================================================private ArrayList<Fragment> mFragmentList;private ViewPager mainPager;// =============================================================private FragmentManager mFragmentManager;// ===========================================================@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 界面初始函数,用来获取定义的各控件对应的IDinitView();}// =========================================private void updataBottomStatu(int index) {  switch (index) {  case 0:  if (!btn_container_conversation.isSelected()) {  setConver(true);setAddre(false);setFind(false);setMine(false);}  break;  case 1:  if (!btn_container_address_list.isSelected()) {  setConver(false);setAddre(true);setFind(false);setMine(false);}  break;  case 2:  if (!btn_container_find.isSelected()) {  setConver(false);setAddre(false);setFind(true);setMine(false);}  break;  case 3:  if (!btn_container_setting.isSelected()) {  setConver(false);setAddre(false);setFind(false);setMine(true);}  break;  }  }  // ========================================class MainPagerAdapter extends FragmentStatePagerAdapter {public MainPagerAdapter(FragmentManager fm) {  super(fm);  }  @Override  public Fragment getItem(int arg0) {  return mFragmentList.get(arg0);  }  @Override  public int getCount() {  return mFragmentList == null ? 0 : mFragmentList.size();  }  @Override  public void destroyItem(ViewGroup container, int position, Object object) {  }  }/*** 初始化组件*/private void initView() {BottomItemOnClickListener mClickListener = new BottomItemOnClickListener();unreadLabel = (TextView) findViewById(R.id.unread_msg_number);unreadAddressLable = (TextView) findViewById(R.id.unread_address_number);unreadFindNumber = (TextView) findViewById(R.id.unread_find_number);btn_container_conversation = findViewById(R.id.btn_container_conversation);btn_container_address_list = findViewById(R.id.btn_container_address_list);btn_container_find = findViewById(R.id.btn_container_find);btn_container_setting = findViewById(R.id.btn_container_setting);btn_conversation = (Button) findViewById(R.id.btn_conversation);btn_address_list = (Button) findViewById(R.id.btn_address_list);btn_find_list = (Button) findViewById(R.id.btn_find_list);btn_setting = (Button) findViewById(R.id.btn_setting);btn_container_conversation.setOnClickListener(mClickListener);btn_container_address_list.setOnClickListener(mClickListener);btn_container_find.setOnClickListener(mClickListener);btn_container_setting.setOnClickListener(mClickListener);mFragmentManager = getSupportFragmentManager();contactListFragment = new ContactlistFragment();chatHistoryFragment = new ChatAllHistoryFragment();settingFragment = new SettingsFragment();findFragment = new FindFragment();mFragmentList = new ArrayList<Fragment>();mFragmentList.add(chatHistoryFragment);mFragmentList.add(contactListFragment);mFragmentList.add(findFragment);mFragmentList.add(settingFragment);mainPager = (ViewPager) findViewById(R.id.content_pager);mainPager.setAdapter(new MainPagerAdapter(mFragmentManager));// 初始化mainPager.setCurrentItem(0);updataBottomStatu(0);/*** 若禁止ViewPager滑动可以自定义ViewPager重写scrollTo方法*/mainPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {updataBottomStatu(position);}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}});}protected class BottomItemOnClickListener implements OnClickListener {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_container_conversation: {mainPager.setCurrentItem(0);updataBottomStatu(0);}break;case R.id.btn_container_address_list: {mainPager.setCurrentItem(1);updataBottomStatu(1);}break;case R.id.btn_container_find: {mainPager.setCurrentItem(2);updataBottomStatu(2);}break;case R.id.btn_container_setting: {mainPager.setCurrentItem(3);updataBottomStatu(3);}break;}}}private void setConver(boolean isSelect) {  btn_container_conversation.setSelected(isSelect);  unreadLabel.setSelected(isSelect);  btn_conversation.setSelected(isSelect);  }  private void setAddre(boolean isSelect) {  btn_container_address_list.setSelected(isSelect);  btn_address_list.setSelected(isSelect);  unreadAddressLable.setSelected(isSelect);  }  private void setFind(boolean isSelect) {  btn_container_find.setSelected(isSelect);  btn_find_list.setSelected(isSelect);  unreadFindNumber.setSelected(isSelect);  }  private void setMine(boolean isSelect) {  btn_container_setting.setSelected(isSelect);  btn_setting.setSelected(isSelect);  }  /*** button点击事件* * @param view*/public void onTabClicked(View view) {switch (view.getId()) {case R.id.btn_conversation: {mainPager.setCurrentItem(0);updataBottomStatu(0);}break;case R.id.btn_address_list: {mainPager.setCurrentItem(1);updataBottomStatu(1);}break;case R.id.btn_find_list: {mainPager.setCurrentItem(2);updataBottomStatu(2);}break;case R.id.btn_setting: {mainPager.setCurrentItem(3);updataBottomStatu(3);}break;}}}

26两种主界面的设计相关推荐

  1. (密码学实验)两种基本古典密码设计与实现—C语言—随机全排列应用

    目录 一.实验目的 二.实验内容 三.实验过程 1.概要设计 (1)随机全排列生成程序 (2)程序逻辑图 2.详细设计 (1)密钥字法 (2)洗牌法 (3)公式法 (4)自设计随机16全排列 (5)生 ...

  2. Qt界面加载网络摄像头,并实时显示,两种更新界面的方法

    Qt界面加载网络摄像头,并实时显示,两种更新界面的方法 1.Qt界面加载网络摄像头,并实时显示,根据头文件中的宏定义来区分使用哪种方式.①Qt信号槽更新界面,②c语言回调方式更新界面 2.使用Open ...

  3. 两种 iPhone 界面的动画效果

    两种 iPhone 界面的动画效果 实现漂亮的动画效果,iPhone SDK 提供了很简单的接口. 1 - 翻页效果: [UIView beginAnimations:nil context:NULL ...

  4. Android ActionBar应用实战,高仿微信主界面的设计

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/26365683 经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对 ...

  5. javaweb基于SSM开发房屋租赁管理系统(房东 租客两种用户) 课程设计 大作业源码 毕业设计

    基于SSM开发房屋租赁管理系统(房东 租客两种用户)(大作业/毕业设计) 开发工具:Eclipse+Jdk+Tomcat+MySQL数据库 演示视频: 基于SSM开发房屋租赁管理系统(房东 租客两种用 ...

  6. linux有两种工作界面,Linux 向用户提供了两种界面:用户界面和系统调用。

    [单选题]This is the very book I am looking for. [多选题]在服务质量差距模型中,对管理认识差距(即差距1)管理的内容有( ). [单选题]张某和赵某两家有仇. ...

  7. 两种经过验证的设计相结合:带有低温探针台的 8425 型直流霍尔系统

    客户有时会要求比我们的标准系统中提供的更专业的表征和测量工具.而且,通常情况下,我们能够通过为他们独特的应用定制系统来适应他们.当经常需要相同类型的定制系统时,将其作为标准产品提供才有意义. 这就是我 ...

  8. 百度AI人脸识别与检测二:学生人脸识别打卡签到系统主界面功能需求和设计以及通过Python实现界面运行

    <百度AI人脸识别与检测>专栏为项目专栏,从零到一,从无到有开发一个学生人脸识别签到系统:主要用到的技术有百度开放平台中的人脸检测.人脸识别.Python图形界面开发PyQt5.线程的管理 ...

  9. 基于Android的小巫新闻客户端开发--UI设计(主界面)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 基于An ...

最新文章

  1. TensorFlow全家桶的落地开花 | 2019 Google开发者日
  2. 个人博客网站的设计与实现_新手建立个人博客网站后如何提高回访率?
  3. 电工杯:电动汽车的充放电优化(有数据代码下载链接)
  4. C语言 实现登录注册功能
  5. ReentrantLock的使用场景
  6. FZU Problem 2168 防守阵地 I
  7. php求两个数组的差值,数组计算差值及项的小计,该如何处理
  8. 常用值得收藏的网站/软件 持续更新中
  9. windows查看系统运行时间和cmd命令大全
  10. 机器学习 深度学习 EM算法 深度解析
  11. React+dva多图片上传
  12. 解决苹果电脑(Mac)无法写入移动硬盘的方法
  13. ocr图文识别工具Text Scanner for Mac
  14. 什么是AOP,AOP的优点是什么?
  15. Jetson TX2 arm板子刷机,安装Caffe
  16. 【59元 第二件1元】SIMEITOL/姿美堂玛卡片 蓝玛咖片MACA 60片
  17. 微信公众平台接口调试工具json格式不对怎么搞_腾讯云和微信推出更快速的小程序开发平台,微信读书小程序作示范...
  18. 手动挡五个档位示意图_1至5档位速度范围,手动挡五个档位示意图
  19. 阿翔编程学-爱情感言
  20. 【编程杂谈】【书单】-陈皓大佬推荐书单

热门文章

  1. 万年历单片机C语言报告,C语言单片机万年历系统设报告优秀文档.doc
  2. 【STM32学习】(30)STM32实现18B20温度采集(标准库和HAL库实现)
  3. sqlserver+asp.net+devextreme从零开始(1)
  4. 统计考勤报表 oracle对多个列求和 sum() 函数
  5. 写给30岁的自己,以及所有即将、正在、已经奔三的朋友们
  6. Unity学习简易单人FPS开发——AI实现(部分)
  7. angular cli + primeNG
  8. 凸优化工具包CVX快速入门
  9. 最详细G1垃圾回收器日志解读
  10. 电脑桌面图标不见了怎么办如果电脑图标不见了,可以尝试以下方法: