今天项目有一个需求,,类是于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. ACM/ICPC 之 数论-素数筛选法 与 "打表"思路(POJ 1595)

    何为"打表"呢,说得简单点就是: 有时候与其重复运行同样的算法得出答案,还不如直接用算法把这组数据所有可能的答案都枚举出来存到一个足够大的容器中去-例如数组(打表),然后再输入数据 ...

  2. Effective C++ -----条款13:以对象管理资源

    为防止资源泄漏,请使用RAII(Resource Acquisiton Is Initialization) 对象,它们在构造函数中获得资源并在析构函数中释放资源. 两个常被使用的RAII class ...

  3. 表现层的设计(一)——常用的模式、Json与DTO

    上几篇博文介绍了 业务逻辑层和数据访问层,我认为写博文的作用主要是向业界的读者交流一种思想,点到为止,至于学习架构设计,通过几篇博文是讲不清楚的,还需要[基础]扎实的情况下,[反复]研究[权威]的书籍 ...

  4. codeforces Educational Codeforces Round 5 A. Comparing Two Long Integers

    题目链接:http://codeforces.com/problemset/problem/616/A 题目意思:顾名思义,就是比较两个长度不超过 1e6 的字符串的大小 模拟即可.提供两个版本,数组 ...

  5. C# 对象深度拷贝

    转载 using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using ...

  6. 【资料】Boost的资料

    http://blog.csdn.net/pongba/article/details/1561110

  7. 在VC中创建并调用DLL

    转自:http://express.ruanko.com/ruanko-express_45/technologyexchange6.html 一.DLL简介 1.什么是DLL? 动态链接库英文为DL ...

  8. Ionic2 Tutorial

    build your first app Now that you have Ionic and its dependencies installed, you can build your firs ...

  9. self和parent的用法

    总结 self  , parent 的用法               只能用在类的内部 self  本类  (不要理解成本对象) parent 父类 在引入自身的静态属性/静态方法 以及父类的方法时 ...

  10. C#的LINQ to Object

    using System; using System.Collections; using System.Collections.Generic; using System.IO; using Sys ...