解析ScrollView--仿QQ空间标题栏渐变
作者:ganchuanpu 时间:2021-06-20 22:44:54
先看一下效果图:
<?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>
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);
}
}
}
我们需要获取图片的高度,并且设置滚动监听,随着滚动的距离来设置标题栏的颜色透明度和字体颜色的透明度
/**
* 获取顶部图片高度后,设置滚动监听
*/
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);
}
});
}
/**
* 滑动监听
* @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));
}
}
来源:http://www.cnblogs.com/ganchuanpu/p/6790680.html
标签:标题栏,渐变
0
投稿
猜你喜欢
Java 的 FileFilter文件过滤与readline读行操作实例代码
2022-04-09 07:22:53
Android实现登陆页logo随键盘收放动态伸缩(完美解决键盘弹出遮挡控件的问题)
2022-05-25 04:13:26
在C#项目中如何使用NHibernate详解
2022-01-24 08:46:17
java面试题——详解HashMap和Hashtable 的区别
2023-08-06 16:38:25
Android游戏开发之黑白棋
2023-05-24 13:39:03
剖析Spring WebFlux反应式编程设计及工作原理
2023-06-10 20:01:13
Android编程之绘制文本(FontMetrics)实现方法
2023-01-19 16:06:16
JAVA技术实现上传下载文件到FTP服务器(完整)
2023-08-26 15:35:43
Java实现部门员工管理
2021-07-21 21:40:41
Spring创建bean实例的几种方式分享
2022-02-21 22:08:19
Android实现信息弹出框
2023-04-20 06:27:40
Android中AlertDialog的六种创建方式
2021-08-23 15:59:52
普通对象使用spring容器中的对象的实现方法
2023-06-17 12:27:20
Java多态中动态绑定原理解析
2021-08-01 06:39:23
Java执行hadoop的基本操作实例代码
2022-11-13 12:08:04
简单介绍三层架构工作原理
2022-10-01 20:28:25
C# 获取当前年份的周期及周期所在日期范围(推荐)
2021-10-06 15:00:44
SpringBoot快速配置数据源的方法
2023-07-28 13:22:42
C#编写游戏客户端的实现代码
2021-08-28 06:24:58
Android studio 出现 Unsupported major.minor version 52.0解决办法
2023-12-01 18:30:53