欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-02-02 15:33:28
先看一下效果图:

先看一下效果图:

解析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));
  }
 }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!