今天项目有一个需求,,类是于QQ空间里面的一个功能,于是就研究了一下,嗯,说这么多,可能还有人不知道指的是那个,直接上效果图。见谅,不会弄动态图:

 

对,就是这种效果,我研究了一下,思路如下:
1.监听ScrollView的滑动
2.通过判断滑动的距离,然后给titleBar设置相应的颜色渐变
 
但是后来我发现我找不到ScrollView的监听器,也就是说,ScrollView没有对外提供相应的监听接口,不提供就算了嘛,我我自己提供于是就出现了下面这段代码:
 
package com.example.myscrollview;
 
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ScrollView;
 
public class MyScrollView extends ScrollView {
    private ScrollViewListener scrollViewListener = null;
 
    public MyScrollView(Context context) {
        super(context);
    }
 
    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        // x为当前滑动条的横坐标,y表示当前滑动条的纵坐标,oldx为前一次滑动的横坐标,oldy表示前一次滑动的纵坐标
        super.onScrollChanged(x, y, oldx, oldy);
        if (scrollViewListener != null) {
            // 在这里将方法暴露出去
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
        }
    }
 
    // 是否要其弹性滑动
    @Override
    protected boolean overScrollBy(int deltaX, int deltaY, int scrollX,
            int scrollY, int scrollRangeX, int scrollRangeY,
            int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
 
        // 弹性滑动关键则是maxOverScrollX, 以及maxOverScrollY,
        // 一般默认值都是0,需要弹性时,更改其值即可
        // 即就是,为零则不会发生弹性,不为零(>0,负数未测试)则会滑动到其值的位置
        return super.overScrollBy(deltaX, deltaY, scrollX, scrollY,
                scrollRangeX, scrollRangeY, 0, 0, isTouchEvent);
    }
 
    // 接口
    public interface ScrollViewListener {
 
        void onScrollChanged(View scrollView, int x, int y, int oldx, int oldy);
 
    }
 
    public void setScrollViewListener(ScrollViewListener listener) {
        scrollViewListener = listener;
    }
}
 
 
自定义完成之后,就可以在MainActivity中进行获取了:
 
package com.example.myscrollview;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;
 
import com.example.myscrollview.MyScrollView.ScrollViewListener;
 
public class MainActivity extends Activity {
    MyScrollView scroll;
    RelativeLayout title;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        scroll = (MyScrollView) findViewById(R.id.scroll);
        title = (RelativeLayout) findViewById(R.id.title);
 
        // 实现自定义控件中的监听器
        scroll.setScrollViewListener(new ScrollViewListener() {
 
            @Override
            public void onScrollChanged(View scrollView, int x, int y,
                    int oldx, int oldy) {
                // TODO Auto-generated method stub
                titleAnima(y);
            }
 
        });
    }
 
    /**
     * 出现渐变效果
     */
    public void titleAnima(int y) {
        int scrollHeight = scroll.getChildAt(0).getHeight()
                - scroll.getHeight();
        float scrollPercent = (float) y / scrollHeight;
        title.getBackground().setAlpha((int) (255 * scrollPercent));
 
        // 如果有文字的话,还可以设置文字的颜色渐变
        // int color = topText.getTextColors().getDefaultColor();
        // int r = Color.red(color);
        // int g = Color.green(color);
        // int b = Color.blue(color);
        // int changeToColor = Color.argb((int) (255 * (1 - scrollPercent)), r,
        // g, b);
        // topText.setTextColor(changeToColor);
    }
 
}
 
 
我的布局文件activity_main.xml是这样的:
 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
 
    <RelativeLayout
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_alignParentTop="true"
        android:background="@android:color/holo_red_dark" >
 
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="标题" />
    </RelativeLayout>
 
    <com.example.myscrollview.MyScrollView
        android:id="@+id/scroll"
        android:layout_below="@id/title"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
 
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
 
            <LinearLayout
                android:id="@+id/lin"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >
 
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#fff"
                    android:padding="16dp"
                    android:text="hh阿迪和法国hius大hiugfhsdiuhgudhsiuahiudshfuihdsiuhhfsdkjhuiagfhsduiah加快速度哈更何况江苏打工记得书法家挥洒加快速度奋斗哈反抗集散地户籍卡hh"
                    android:textSize="40sp" />
 
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#fff"
                    android:padding="16dp"
                    android:text="hh阿迪和法国hius大hiugfhsdiuhgudhsiuahiudshfuihdsiuhhfsdkjhuiagfhsduiah加快速度哈更何况江苏打工记得书法家挥洒加快速度奋斗哈反抗集散地户籍卡hh"
                    android:textSize="40sp" />
 
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#fff"
                    android:padding="16dp"
                    android:text="hh阿迪和法国hius大hiugfhsdiuhgudhsiuahiudshfuihdsiuhhfsdkjhuiagfhsduiah加快速度哈更何况江苏打工记得书法家挥洒加快速度奋斗哈反抗集散地户籍卡hh"
                    android:textSize="40sp" />
 
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#fff"
                    android:padding="16dp"
                    android:text="hh阿迪和法国hius大hiugfhsdiuhgudhsiuahiudshfuihdsiuhhfsdkjhuiagfhsduiah加快速度哈更何况江苏打工记得书法家挥洒加快速度奋斗哈反抗集散地户籍卡hh"
                    android:textSize="40sp" />
            </LinearLayout>
        </RelativeLayout>
    </com.example.myscrollview.MyScrollView>
 
</RelativeLayout>
 
 
是不是很简单,不用谢,请叫我雷锋。
 

android中随着ScrollView的滑动,titleBar状态的改变的更多相关文章

  1. android中实现view可以滑动的六种方法续篇(二)

    承接上一篇,上一篇中讲解了实现滑动的第五种方法,如果你还没读过,可点击下面链接: http://www.cnblogs.com/fuly550871915/p/4985482.html 这篇文章现在来 ...

  2. Android中不同方向嵌套滑动的解决方式(ListView为样例)

    前言: 就像手机QQ的聊天消息列表.一个纵向滑动的ListView列举全部消息,但每一条消息能够横向滑动. 而默认情况下,仅仅能有一个地方消化处理触摸事件,要么ListView吃掉这个事件.要么子It ...

  3. Android中监听ListView滑动到底部

    Android中的应用就是ListView中向下滑动加载更多的功能,不要再onScroll方法中进行判断,那样当滑动到底部的时候,触摸屏幕就会又去加载更多,效果很差,可以自行测试一下: listvie ...

  4. android中listview的item滑动删除效果(已解决listview点击问题)

    领导看到iphone上tableview有个滑动删除的效果,要求在android上也实现,搜了下资料,实现起来比较简单,可弄到后面,居然不能点击了,把一篇文章中的代码修改了一下,捣鼓了一番,搞定,下面 ...

  5. Android 监听ScrollView的滑动

    我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部.可惜的是SDK并没有相应的方法,不过倒是提供了一个 protected void onScrollChanged ...

  6. android中实现view可以滑动的六种方法续篇(一)

    承接上一篇,如果你没有读过前四章方法,可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4985053.html 下面开始讲第五中方法. 五.利用Sc ...

  7. android中实现view可以滑动的六种方法

    在android开发中,经常会遇到一个view需要它能够支持滑动的需求.今天就来总结实现其滑动的六种方法.其实每一种方法的 思路都是一样的,即:监听手势触摸的坐标来实现view坐标的变化,从而实现vi ...

  8. Android中的ScrollView实现 拖拽反弹效果

    public class BounceScrollView extends ScrollView { private View inner;// 孩子View private float y;// 点 ...

  9. 解决Android中,禁止ScrollView内的控件改变之后自动滚动 - 转

    问题: 最近在写一个程序界面,有一个scrollVIew,其中有一段内容是需要在线加载的. 当内容加载完成后,ScrollView中内容的长度会发生改变,这时ScrollView会自动下滚,如下图所示 ...

随机推荐

  1. JSP页面格式化货币金额,千分位

    <fmt:formatNumber value="${值}" pattern="currency"></fmt:formatNumber> ...

  2. 仿美团外卖,饿了吗 两个ListView联动,左边点击切换右边,右边滑动切换左边

    先上效果图: 实现思路: 1.先说右边标题: 首先,右边的数据源集合中的Javabean中含有三个属性name,type,title,而每个条目中会默认含有一个标题. 如果这是第一个条目,就让标题显示 ...

  3. Oracle、SQL Server、MySQL分页方法

    测试用例:查询TEST_TABLE表中TEST_COLUMN列的第10-20条数据 1,Oracle分页方法 SELECT A.* FROM ( SELECT ROWNUM ROWNO, B.* FR ...

  4. iOS中NSUserDefaults详解

    NSUserDefault 作为iOS中一种轻量级数据本地化方式,简单易用,经常用于存储一些应用相关属性记录,例如图书app的背景色,进度,上次阅读的书籍及相关配置信息.NSUserDefault实质 ...

  5. Undefined symbols for architecture x86_64: ( linker command failed with exit code 1)

    当出现  linker command failed with exit code 1 (use -v to see invocation) 的错误总结,具体内容如下: Undefined symbo ...

  6. 如何解决exe4j生成exe文件后弹出提示信息

    使用exe4j生成exe文件时会提示以上一段信息,这个主要是没有注册导致的,在welcome to exe4j的右下角有一个注册信息的地方,去找个注册码,就OK了. 通用注册码:L-g782dn2d- ...

  7. iOS小技巧总结,绝对有你想要的

    原文链接 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIV ...

  8. Gif图片制作

    gif图片是博客中展示项目效果的一种很好的方式,为我们的app制作一张gif图片并不复杂,录制屏幕采用系统自带的QuickTime Player,制作gif采用PicGIF软件.licecap软件更是 ...

  9. Linux 压缩系列常用命令

    tar 命令: http://man.linuxde.net/tar zip 命令: http://man.linuxde.net/zip unzip 命令: http://man.linuxde.n ...

  10. TIME_WAIT连接过多解决办法

    问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放.看了一下18888,当时吓到了. 现象: 1.外部机器不能正常连接S ...