今天一个小学弟,有这个需求他问我,我就写了个简单的demo
首先说下思路这里用的scrollview,我需要自定义一个,然后监听y轴变化,然后将toolbar的高度分成255份,让y轴值除以一份然后被255减去就是透明度。
这里用的方法是这个
title_toobar.setBackgroundColor(Color.argb((int) (255-alpha), 255, 64, 129));
Color.argb的四个参数第一个是透明度0是透明255不透明,剩下是rgb的。
还有一个重要的方法就是获取toolbar或者其他布局的高度的方法
int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
title_toobar.measure(h,0);
titleHieght= title_toobar.getMeasuredHeight();
好了给出自定义scrollview
package viewpage.yundong.com.titlechangecolor;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;
/**
* Created by Administrator on 2017/3/9.
*/
public class NewScroll extends ScrollView {
public NewScroll(Context context) {
super(context);
}
public NewScroll(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NewScroll(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (onScrollListener != null) {
onScrollListener.onScroll(t);
}
}
/**
* 设置滚动接口
* @param onScrollListener
*/
public void setOnScrollListener(OnScrollListener onScrollListener) {
this.onScrollListener = onScrollListener;
}
private OnScrollListener onScrollListener;
/**
*
* 滚动的回调接口
*
* @author xiaanming
*
*/
public interface OnScrollListener{
/**
* 回调方法, 返回MyScrollView滑动的Y方向距离
* @param scrollY
*/
public void onScroll(int scrollY);
}
}
给出activity的代码
package viewpage.yundong.com.titlechangecolor;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements NewScroll.OnScrollListener{
private NewScroll scrollView;
Toolbar title_toobar;
int titleHieght;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scrollView= (NewScroll) findViewById(R.id.scrollView);
scrollView.setOnScrollListener(this);
title_toobar= (Toolbar) findViewById(R.id.title_toobar);
int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
title_toobar.measure(h,0);
titleHieght= title_toobar.getMeasuredHeight();
textView= (TextView) findViewById(R.id.text_view);
// titleHieght= title_toobar.getBottom();
}
@Override
public void onScroll(int scrollY) {
Log.e("滑动Yjul",scrollY+"==="+titleHieght);
//当滑动的距离 <= toolbar高度的时候,改变Toolbar背景色的透明度,达到渐变的效果
if (scrollY <= titleHieght) {
float scale = (float) titleHieght / 255;
float alpha = scrollY/scale ;
Log.e("透明度","==="+alpha*255);
title_toobar.setBackgroundColor(Color.argb((int) (255-alpha), 255, 64, 129));
textView.setTextColor(Color.argb((int) (255-alpha), 0, 0, 0));
} else {
//上述虽然判断了滑动距离与toolbar高度相等的情况,但是实际测试时发现,标题栏的背景色
//很少能达到完全不透明的情况,所以这里又判断了滑动距离大于toolbar高度的情况,
//将标题栏的颜色设置为完全不透明状态
title_toobar.setBackgroundColor(Color.argb((int) 0, 255, 64, 129));
textView.setTextColor(Color.argb((int)0, 0, 0, 0));
}
}
}
例子很简单,你换成其他的也可以主要是监听滑动距离这个思路就OK了