实现tablayout随着fragment垂直滑动而滑动,并且悬浮于最上方

我先上效果

实现tablayout随着fragment垂直滑动而滑动,并且悬浮于最上方_第1张图片
luzhi.gif

这种效果很明显是用CoordinatorLayout来实现的,悬浮的区域位于AppBarLayout,直接上布局的源码


 


    
        
        
 
        
    
     

    


自定义了一个CoordinatorLayout是为了通过NestedScrollingParent接口中的一个onNestedScroll来获取滑动的状态从而改变tab中的图片是显示还是隐藏。下面上自定的CoordinatorLayout源码:

import android.content.Context;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.TabLayout;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

/**
 * Created by Administrator on 2017/7/4 0004.
 */

public class Mycoor extends CoordinatorLayout {
    public String[] strings = {"进行中", "待评价", "已完成", "待报修"};

    public Mycoor(Context context) {
        super(context);
    }

    public Mycoor(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public Mycoor(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
        super.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
        //获取 appBarLayout
        AppBarLayout appBarLayout = (AppBarLayout) getChildAt(0);
        if (dyConsumed > 0) {
        //这种情况是当tablayout悬浮的状态
        //获取 tableLayout
            TabLayout tableLayout = (TabLayout) appBarLayout.getChildAt(1);
            for (int i = 0; i < tableLayout.getTabCount(); i++) {
                TabLayout.Tab tab = tableLayout.getTabAt(i);
                tab.setText(i + "");
                tab.setIcon(R.mipmap.ic_launcher);
            }
        } else if (dyConsumed == 0) {
        //这种情况是当title要出现在屏幕上的时候
            TabLayout tableLayout = (TabLayout) appBarLayout.getChildAt(1);
            for (int i = 0; i < tableLayout.getTabCount(); i++) {
                TabLayout.Tab tab = tableLayout.getTabAt(i);
                tab.setText(strings[i]);
                tab.setIcon(null);
            }
        }
    }
}

activity里面的代码我就不在赘述 就是fragment的切换再加上tablayout的tab设置的代码,到此ui要求的效果已经完成,其实这里面用到NestedScroll的知识,大家可以学习下,确实能实现不少酷炫的效果,比如说视觉差啊等一些通过传统的手势冲突解决方案解决不了的问题都可以用这种方法来搞定,还是比较强大的。

你可能感兴趣的:(实现tablayout随着fragment垂直滑动而滑动,并且悬浮于最上方)