android 导航栏渐变,Android开发基于ScrollView实现的渐变导航栏效果示例

本文实例讲述了Android开发基于ScrollView实现的渐变导航栏效果。分享给大家供大家参考,具体如下:

前些日子项目要在原来的页面上加入渐变导航栏的功能,查了很多资料,很多资源都是监听到listview的高度来实现渐变导航栏的效果,可是项目里面很多的界面都是使用ScrollView来实现滑动效果。

实在没办法,就自己写了一个test来实现这个效果。

a0a485eab440224922abd5aa0b3e23aa.gif

话不多说,马上看一下思路吧,其实渐变导航栏无非就是改变导航栏的透明度也就是可以设定一个高度,根据这个高度,监听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类即可。

希望本文所述对大家Android程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值