欢迎来到代码驿站!

Android代码

当前位置:首页 > 移动开发 > Android代码

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

时间:2021-03-13 09:49:51|栏目:Android代码|点击:

先看一下效果图:

<?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));
  }
 }

上一篇:微信网页 第三方登录原理详解

栏    目:Android代码

下一篇:详解android webView独立进程通讯方式

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

本文地址:http://www.codeinn.net/misctech/80040.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有