关于android 自定义TabBar的一些坑

作者: DaZenD | 来源:发表于2020-07-02 11:19 被阅读0次

    需求

    图标突出,可配置哪个突出,

    自定义

    viewgroup + item布局

    关于图标突出的实现

    查看了几个库,两种思路:

    clipchildren

    缺点,严重的缺点:超出部分,交互是异常的:viewgroup的事件机制所致,会响应到下面的布局上

    坑点:这坑点不算大,查资料很多,clipchildren要设置到跟布局上,其实每个父布局都要设置这个属性:clipchildren = false。。。一直设置到activity或fragment的根节点上。。。所以,ui嵌套复杂的,还是转constraintlayout吧

    最后,由于它的缺点,放弃了,使用下面的方案了

    根布局写死突出图标

    缺点,另强迫症的抓狂缺点:既然我是封装库的,这个ui却要写到外面。并且不灵活啊,如果项目去求,不同的身份,tabbaritem是有变动的,咋整。。。话说回来,item变动时候,突出图标不在中间的话,说明美工设计不合理

    坑点

    专门起了个坑点目录。。因为采用这种方案,实在遇到hin多问题

    fab自定义

    第一个尝试的是fab,因为fab的交互很棒,点击给你的反馈很爽。。

    android中使用fab,强迫癌会犯的,为毛设置width、height不管用,为毛图片要么很大要么很小呢

    <dimen name="design_fab_size_normal" tools:ignore="PrivateResource">56dp</dimen>
    <dimen name="design_fab_image_size" tools:override="true">24dp</dimen>
    

    查看一下fab的源码,能找到fab是通过dimen资源设置的,

    elevation

    阴影,官方属性是:xxxx。。。

    然后,就是各种尝试,viewgroup + iv,ivbutton,cl + iv等,在as中preview查看,都有阴影,但是真机跑起来就是mao都没有。天了噜,要不是我hin~,就放弃了

    末了:问题出在shape上,stroke,stroke,stroke。。。切记,描边了,阴影就给搞没了,what‘s the 法克。。

    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="@color/white"/>
        <corners android:radius="22dp" />
    </shape>
    
    或者
    
    <shape android:shape="oval"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <size android:width="44dp" android:height="44dp"/>
    </shape>
    

    然后,阴影有了,就要追求fab那样的交互了:

    
    android:stateListAnimator="@drawable/lift_on_touch"
    android:foreground="?android:attr/selectableItemBackground"
    
    
    <!--lift_on_touch 点击有下沉效果-->
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:state_enabled="true"
            android:state_pressed="true">
            <set>
                <objectAnimator
                    android:duration="@android:integer/config_shortAnimTime"
                    android:propertyName="translationZ"
                    android:valueTo="6dp"
                    android:valueType="floatType"/>
            </set>
        </item>
        <item>
            <set>
                <objectAnimator
                    android:duration="@android:integer/config_shortAnimTime"
                    android:propertyName="translationZ"
                    android:valueTo="0dp"
                    android:valueType="floatType"/>
            </set>
        </item>
    </selector>
    

    补充

    imageview设置elevation不管用。以为是png图怕的问题,png的通道是透明的,所以,又说设置阴影不管用

    https://blog.csdn.net/u013564276/article/details/51701153

    相关文章

      网友评论

        本文标题:关于android 自定义TabBar的一些坑

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