先看一下效果图:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<?xml
version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hankkin.gradationtitlebar.QQSpeakActivity">
<com.hankkin.gradationscroll.GradationScrollView
android:id="@+id/scrollview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/iv_banner"
android:scaleType="fitXY"
android:src="@drawable/banner3"
android:layout_width="match_parent"
android:layout_height="200dp" />
<com.hankkin.gradationscroll.NoScrollListview
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</com.hankkin.gradationscroll.NoScrollListview>
</LinearLayout>
</com.hankkin.gradationscroll.GradationScrollView>
<TextView
android:paddingBottom="10dp"
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="55dp"
android:gravity="center|bottom"
android:text="我是标题"
android:textSize="18sp"
android:textColor="@color/transparent"
android:background="#00000000" />
</RelativeLayout>
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
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);
}
}
}
|
我们需要获取图片的高度,并且设置滚动监听,随着滚动的距离来设置标题栏的颜色透明度和字体颜色的透明度
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/**
*
获取顶部图片高度后,设置滚动监听
*/
private void initListeners()
{
ViewTreeObserver
vto = ivBanner.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
textView.getViewTreeObserver().removeGlobalOnLayoutListener(
this);
height
= ivBanner.getHeight();
scrollView.setScrollViewListener(QQSpeakActivity.this);
}
});
}
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/**
*
滑动监听
*
@param scrollView
*
@param x
*
@param y
*
@param oldx
*
@param oldy
*/
@Override
public void onScrollChanged(GradationScrollView
scrollView, int x, int y,
int oldx, int oldy)
{
//
TODO Auto-generated method stub
if (y
<= 0)
{ //设置标题的背景颜色
textView.setBackgroundColor(Color.argb((int) 0, 144,151,166));
} else if (y
> 0 &&
y <= height) { //滑动距离小于banner图的高度时,设置背景和字体颜色颜色透明度渐变
float scale
= (float)
y / height;
float alpha
= (255 *
scale);
textView.setTextColor(Color.argb((int)
alpha, 255,255,255));
textView.setBackgroundColor(Color.argb((int)
alpha, 144,151,166));
} else { //滑动到banner下面设置普通颜色
textView.setBackgroundColor(Color.argb((int) 255, 144,151,166));
}
}
github地址:https://github.com/a4575169/GradationTitleBar.git
|