像今日头条和360手机助手底部Tab 都会添加一些水波纹效果,这样能增加用户体验,这里浅谈添加Ripple 的三种方式:

 1,有边界的水波纹

  android:background="?android:attr/selectableItemBackground"

效果如下图所示:

android 底部Tab添加水波纹效果_第1张图片

2,无边界的Ripple

  android:background="?android:attr/selectableItemBackgroundBorderless"

很明显,无边家的效果好一些。

3,自定义Ripple

在Drawable 文件夹下创建tab_ripple.xml

<?xml version="1.0" encoding="utf-8"?>

看看视觉效果:

android 底部Tab添加水波纹效果_第2张图片

ripple 颜色改成蓝色,效果又好看一些。

布局源码:

1,相关style:

                     

style 相关抽取能让xml 更简洁。


2,布局:

底部bottom 布局:

<?xml version="1.0" encoding="utf-8"?>                                                                                                                    

相关Activity 布局:

<?xml version="1.0" encoding="utf-8"?>        

几个selector:

tab_selector_msg:

                

tab_selector_contact:

                

tab_selector_find:

                

tab_selector_setting:

                

selector_blue:

<?xml version="1.0" encoding="utf-8"?>            

图片么自己找。。。。

主界面代码:

package com.dhl.mdstudy;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.LinearLayout;public class BottomRippleActivity extends AppCompatActivity {    private LinearLayout tab_menu_01,tab_menu_02,tab_menu_03,tab_menu_04 ;    private View currentBtn ;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_bottom_ripple);        bindViews();    }     private void  bindViews()    {        tab_menu_01 = (LinearLayout) findViewById(R.id.tab_menu_01);        tab_menu_02 = (LinearLayout)findViewById(R.id.tab_menu_02) ;        tab_menu_03 = (LinearLayout)findViewById(R.id.tab_menu_03);        tab_menu_04 = (LinearLayout)findViewById(R.id.tab_menu_04);        tab_menu_01.setSelected(true);        currentBtn = tab_menu_01;        tab_menu_01.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                tab_menu_01.setSelected(true);                setCurrentBtn(tab_menu_01);                //currentBtn = tab_menu_01;            }        });        tab_menu_02.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                tab_menu_02.setSelected(true);                setCurrentBtn(tab_menu_02);            }        });        tab_menu_03.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                tab_menu_03.setSelected(true);                setCurrentBtn(tab_menu_03);            }        });        tab_menu_04.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                tab_menu_04.setSelected(true);                setCurrentBtn(tab_menu_04);            }        });    }    private void setCurrentBtn(View view)    {        if(currentBtn !=null)        {            if(currentBtn == view)            {                return ;            }            currentBtn.setSelected(false);        }        currentBtn = view;    }}

更多相关文章

  1. 【Android 界面效果14】RelativeLayout里常用的位置属性
  2. android 设置布局动画
  3. android 常用布局有哪些
  4. Android界面布局基本知识简述
  5. Android布局属性解析
  6. android 布局文件属性说明
  7. 相对布局的常用属性
  8. android页面布局

随机推荐

  1. Tasker, Android系统增强神器
  2. Android(安卓)基于Socket.io即时通讯IM实
  3. Android静态安全检测 -> 明文数字证书风
  4. Genymotion安装
  5. 〖Android〗代理与正常网络分开同步Cyang
  6. 【Android(安卓)Developers Training】 8
  7. Mac下Qt for android 环境配置
  8. Android(安卓)创建与解析XML(四)—— Pull
  9. android 下修改 hosts文件 及 out of mem
  10. systemtap在android、pandaboard上的移植