解析ScrollView--仿QQ空间标题栏渐变

作者:ganchuanpu 时间:2021-06-20 22:44:54 

先看一下效果图:

解析ScrollView--仿QQ空间标题栏渐变


<?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
  • asp之家 软件编程 m.aspxhome.com