使用ScrollView做渐变导航栏

前些日子项目要在原来的页面上加入渐变导航栏的功能,查了很多资料,很多资源都是监听到listview的高度来实现渐变导航栏的效果,可是项目里面很多的界面都是使用ScrollView来实现滑动效果。
实在没办法,就自己写了一个test来实现这个效果。
这里写图片描述
话不多说,马上看一下思路吧,其实渐变导航栏无非就是改变导航栏的透明度也就是可以设定一个高度,根据这个高度,监听ScrollView滑动的距离,从而实现渐变导航栏的效果。
下面看代码吧
首先自定义一个ScrollView
1、ObservableScrollView.java

package com.example.test;

import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.ScrollView;

public class ObservableScrollView extends ScrollView implements
        ObservableScrollable {
    private boolean mDisableEdgeEffects = true;

    private OnScrollChangedCallback mOnScrollChangedListener;

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

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

    public ObservableScrollView(Context context, AttributeSet attrs,
            int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (mOnScrollChangedListener != null) {
            mOnScrollChangedListener.onScroll(l, t);
        }
    }

    @Override
    protected float getTopFadingEdgeStrength() {
        if (mDisableEdgeEffects
                && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
            return 0.0f;
        }
        return super.getTopFadingEdgeStrength();
    }

    @Override
    protected float getBottomFadingEdgeStrength() {
        if (mDisableEdgeEffects
                && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
            return 0.0f;
        }
        return super.getBottomFadingEdgeStrength();
    }

    @Override
    public void setOnScrollChangedCallback(OnScrollChangedCallback callback) {
        mOnScrollChangedListener = callback;
    }
}

这里面定义了两个接口
2、ObservableScrollable.java

package com.example.test;


public interface ObservableScrollable {
    void setOnScrollChangedCallback(OnScrollChangedCallback callback);
}

3、OnScrollChangedCallback.java

package com.example.test;

public interface OnScrollChangedCallback {
    void onScroll(int l, int t);
}

这里的回调函数,实现了对ScrollView的监听
然后就是main方法
4、MainActivity.java

package com.example.test;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;
import android.widget.RelativeLayout;
import android.widget.ScrollView;

public class MainActivity extends Activity implements OnScrollChangedCallback {
    ObservableScrollable sv;
    RelativeLayout rl;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        rl = (RelativeLayout) findViewById(R.id.rl);
        sv = (ObservableScrollable) findViewById(R.id.sv);
        sv.setOnScrollChangedCallback(this);
    }
    @Override
    public void onScroll(int l, int t) {
        float newAlpha = (float)t/500;
        rl.setAlpha(newAlpha);
    }

}

main中设置对ScrollView的监听,同时设置监听高度为500,将500分为100%来实现渐变导航栏的改变
然后在xml文件上继承ObservableScrollView类即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值