看了QQ标题滑动透明感觉还挺,霸气的,就想着自己搞一个出来,做出来的感觉还行,自己也封装了一次,
思路:根据上下滑动的距离来实现透明度,然后根据公式计算合适的值0~255之间( 滑动距离 / 你想要的高度 = 透明度)
部分思路参考互联网一个作者的.0.0忘记名字了...
显示效果如下:
重写ScrollView里的方法,使他暴露出来,我这里是用的接口回调
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if (scrollViewListener != null) {
scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
}
}
实现方法里的代码
@Override
public void onScrollChanged(GradationScrollView scrollView, int x, int y, int oldx, int oldy) {
// TODO Auto-generated method stub
if (y <= 0) { //设置标题的背景颜色
back_text.setBackgroundColor(Color.argb((int) 0, 37, 73, 157));//给什么控件设置
} else if (y > 0 && y <= imageHeight) { //滑动距离小于banner图的高度时,设置背景和字体颜色颜色透明度渐变
float scale = (float) y / imageHeight;
float alpha = (255 * scale);
back_text.setTextColor(Color.argb((int) alpha, 255, 255, 255));//给什么控件设置
back_text.setBackgroundColor(Color.argb((int) alpha, 37, 73, 157));//给什么控件设置
} else { //滑动到banner下面设置普通颜色
back_text.setBackgroundColor(Color.argb((int) 255, 37, 73, 157));//给什么控件设置
}
}
// 255 255 255
// RGB颜色
你一看我擦,255,255,255的,还要麻烦美工???????不用,早知道你会说这个滴,来下边还有,我把Color给你转换好啦,开心不,老铁?
//红十六进制ff0000 color是你要转换的颜色
final int red = (color & 0xff0000) >> 16;
//绿十六进制00ff00
final int green = (color & 0x00ff00) >> 8;
//蓝十六进制0000ff
final int blue = (color & 0x0000ff);
//比如我填一个"00FF00"
//向右移动8/16位,得到int类型,然后赋值
具体应用
@Override
public void onScrollChanged(GradationScrollView scrollView, int x, final int y, int oldx, int oldy) {
UIUtils.runOnThread(new Runnable() {
@Override
public void run() {
final int red = (color & 0xff0000) >> 16;
final int green = (color & 0x00ff00) >> 8;
final int blue = (color & 0x0000ff);
UIUtils.runOnUIThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (y <= 0) { //设置标题的背景颜色
view_text_back.setBackgroundColor(Color.argb((int) 0, red, green, blue));
fen_aaa.setBackgroundColor(Color.argb((int) 0, red, green, blue));
} else if (y > 0 && y <= imageHeight) { //滑动距离小于banner图的高度时,设置背景和字体颜色颜色透明度渐变
float scale = (float) y / imageHeight;
float alpha = (255 * scale);
view_text_back.setTextColor(Color.argb((int) alpha, 255, 255, 255));
view_text_back.setBackgroundColor(Color.argb((int) alpha, red, green, blue));
fen_aaa.setBackgroundColor(Color.argb((int) alpha, red, green, blue));
} else { //滑动到banner下面设置普通颜色
view_text_back.setBackgroundColor(Color.argb((int) 255, red, green, blue));
fen_aaa.setBackgroundColor(Color.argb((int) 255, red, green, blue));
}
}
});
}
});
}
------------------------------------------------------------------------------------------------------------------START
开始咯,开始步骤了
步骤1(重写ScrollView),我这个带有监听的,这是我的ScrollView 类
/**
* XINHAO_HAN
*
*/
public class GradationScrollView extends ScrollView {
public interface ScrollViewListener {
void onScrollChanged(GradationScrollView scrollView, int x, int y,
int oldx, int oldy);
}
private ScrollViewListener scrollViewListener = null;
public GradationScrollView(Context context) {
super(context);
}
public GradationScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
public GradationScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if (scrollViewListener != null) {
scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
}
}
}
步骤2,在布局当中添加GradationScrollView,并且fingViewById
步骤3
//设置监听
scrollView.setScrollViewListener(this);
如果是ListView
listView.setOnScrollChangeListener(l);
希望能给你一些启发0.0