标题栏透明android,android改变标题栏的透明度

类似这种效果,想必大家都看过,如某宝的商品详情页,小米商城首页等。。。

651d2edcd82a

我们这里是自定义一个ScrollView去监听控件的滑动,然后不断去改变标题栏的透明度。

/**

*    Created by zwr on 2017/3/11.

*     自定义的ScrollView

*/

```

publicclassChangeAlphaScrollViewextendsScrollView {

privateOnScrollChangedListenermOnScrollChangedListener;

publicChangeAlphaScrollView(Context context) {

super(context);

}

```

publicChangeAlphaScrollView(Context context, AttributeSet attrs) {

super(context, attrs);

}

publicChangeAlphaScrollView(Context context, AttributeSet attrs,intdefStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

protectedvoidonScrollChanged(intl,intt,intoldl,intoldt) {

super.onScrollChanged(l, t, oldl, oldt);

if(mOnScrollChangedListener!=null) {

mOnScrollChangedListener.onScrollChanged(this, l, t, oldl, oldt);

}

}

publicvoidsetOnScrollChangedListener(OnScrollChangedListener listener) {

mOnScrollChangedListener= listener;

}

publicinterfaceOnScrollChangedListener {

void onScrollChanged(ScrollView who,intl,intt,intoldl,intoldt);

}

}

**

*  Created by zwr on 2017/3/11.

mianactivity去实现接口

*/

publicclassMainActivityextendsAppCompatActivityimplementsChangeAlphaScrollView.OnScrollChangedListener {

privateImageViewimageView;

privateToolbartoolBar;

privatefloatheaderHeight;//顶部高度

privatefloatminHeight;//顶部最低高度,即Bar的高度

privateChangeAlphaScrollViewscrollView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

imageView= (ImageView) findViewById(R.id.imageView);

scrollView= (ChangeAlphaScrollView) findViewById(R.id.myScrollView);

toolBar= (Toolbar) findViewById(R.id.tool_bar_home);

scrollView.setOnScrollChangedListener(this);

getMeasure();

}

@Override

public void onScrollChanged(ScrollView who,intl,intt,intoldl,intoldt) {

//得到y轴的偏移量

floatscrollY= who.getScrollY();

//变化率

floatheaderBarOffsetY=headerHeight-minHeight;

floatoffset=1- Math.max((headerBarOffsetY-scrollY) /headerBarOffsetY,0f);

//Toolbar背景色透明度

toolBar.setBackgroundColor(Color.argb((int) (offset*255),255,64,129));//颜色的RGB值

}

//调用此方法重新测量得到控件高度

private void getMeasure() {

intw= View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);

inth= View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);

imageView.measure(w,h);

headerHeight=imageView.getMeasuredHeight();

toolBar.measure(w,h);

minHeight=toolBar.getMeasuredHeight();

}

}

```

注:若有错误欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!针对您的问题,您可以使用 Android 中的 Toolbar 控件来实现滑动渐变标题栏。 具体实现步骤如下: 1. 在布局文件中添加 Toolbar 控件,并设置其高度为 wrap_content。 2. 在代码中通过 findViewById 获取 Toolbar 对象,并调用 setSupportActionBar 方法将其设置为当前 Activity 的 ActionBar。 3. 在 Activity 的 onCreate 方法中,通过 getSupportActionBar().setDisplayHomeAsUpEnabled(true) 设置标题栏左侧显示返回按钮。 4. 在滑动时,通过监听 RecyclerView 的滚动事件,动态改变标题栏的背景颜色和透明度,实现滑动渐变效果。 5. 在 onScrollStateChanged 方法中,根据当前滚动状态判断是否需要执行动画效果。 下面是一个简单的示例代码: ```java // 获取 Toolbar 对象 Toolbar toolbar = findViewById(R.id.toolbar); // 将 Toolbar 设置为当前 Activity 的 ActionBar setSupportActionBar(toolbar); // 显示返回按钮 getSupportActionBar().setDisplayHomeAsUpEnabled(true); // 监听 RecyclerView 的滚动事件 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE) { // 滑动停止时执行动画效果 animateToolbarColor(0xFF0000FF, 0x00000000); } } @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); // 获取当前 RecyclerView 的滚动位置 int scrollY = recyclerView.computeVerticalScrollOffset(); // 计算标题栏透明度 int alpha = Math.min(255, scrollY * 2); // 执行动画效果 animateToolbarColor(Color.argb(alpha, 0xFF, 0x00, 0x00), Color.argb(0, 0x00, 0x00, 0x00)); } }); // 改变标题栏背景颜色和透明度的动画效果 private void animateToolbarColor(int fromColor, int toColor) { ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), fromColor, toColor); colorAnimation.setDuration(250); colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animator) { toolbar.setBackgroundColor((int) animator.getAnimatedValue()); } }); colorAnimation.start(); } ``` 希望这个示例能够对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值