《Android View滚动、拉伸到顶/底部弹性回弹复位》

我在上一篇文章介绍了如何实现一个Android ListView拉到顶/底部后,像橡皮筋一样弹性回弹复位(《Android ListView拉到顶/底部,像橡皮筋一样弹性回弹复位》,文章链接地址: http://blog.csdn.net/zhangphil/article/details/47311155 )。事实上,Android凡是由ScrollView包裹的控件,均可实现滚动到顶/底部,弹性回弹复位的交互设计效果。关键点是重写Android原生ScrollView的overScrollBy()方法。
现给出实现代码和步骤:
(1)首先需要写一个View继承自ScrollView,然后重写关键的方法:overScrollBy()。假设该view就叫做ZhangPhilScrollView:

package zhangphil.view;import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.widget.ScrollView;public class ZhangPhilScrollView extends ScrollView{// 这个值控制可以把ScrollView包裹的控件拉出偏离顶部或底部的距离。private static final int MAX_OVERSCROLL_Y = 200;private Context mContext;private int newMaxOverScrollY;public ZhangPhilScrollView(Context context) {super(context);init(context);}public ZhangPhilScrollView(Context context, AttributeSet attrs) {super(context, attrs);init(context);}/** public ZhangPhilListView(Context context, AttributeSet attrs, int* defStyle) { super(context, attrs, defStyle); this.mContext = context;* init(); }*/@SuppressLint("NewApi")private void init(Context context) {this.mContext = context;DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();float density = metrics.density;newMaxOverScrollY = (int) (density * MAX_OVERSCROLL_Y);//false:隐藏ScrollView的滚动条。this.setVerticalScrollBarEnabled(false);//不管装载的控件填充的数据是否满屏,都允许橡皮筋一样的弹性回弹。this.setOverScrollMode(ScrollView.OVER_SCROLL_ALWAYS);}// 最关键的地方。//支持到SDK8需要增加@SuppressLint("NewApi")。@SuppressLint("NewApi")@Overrideprotected boolean overScrollBy(int deltaX, int deltaY, int scrollX,int scrollY, int scrollRangeX, int scrollRangeY,int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {return super.overScrollBy(deltaX, deltaY, scrollX, scrollY,scrollRangeX, scrollRangeY, maxOverScrollX, newMaxOverScrollY,isTouchEvent);}
}

(2)然后在布局文件代码中像使用Android原生的ScrollView一样使用ZhangPhilScrollView包裹需要实现弹性回弹交互设计的组件,在我的这个例子中,出于简单的目的,假设ZhangPhilScrollView包裹的只是一个TextView:

<zhangphil.view.ZhangPhilScrollView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><TextViewandroid:id="@+id/text"android:layout_width="match_parent"android:layout_height="wrap_content" /></zhangphil.view.ZhangPhilScrollView>

测试:

package zhangphil.view;import zhangphil.view.R;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;
import android.graphics.Color;
import android.os.Bundle;public class MainActivity extends ActionBarActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView text = (TextView) findViewById(R.id.text);// 测试数据集。String s = "";for (int i = 0; i < 10; i++) {s += i + "\n";}text.setText(s);// 设置TextView的背景颜色,更容易观察出弹性回弹效果。text.setBackgroundColor(Color.RED);}
}

Android View滚动、拉伸到顶/底部弹性回弹复位相关推荐

  1. android 底部回弹,Android View滚动、拉伸到顶/底部弹性回弹复位

     <Android View滚动.拉伸到顶/底部弹性回弹复位> 我在上一篇文章介绍了如何实现一个Android ListView拉到顶/底部后,像橡皮筋一样弹性回弹复位(<And ...

  2. android 球形进度,android仿360手机卫士的自定义波浪球形进度View 滚动痕迹

    先看问题效果图: 那个球星水波纹是个自定义view,代码如下 import com.jinsheng.R; import com.jinsheng.util.MyUtil; import androi ...

  3. Android 上下滚动字幕实现

    首先values文件夹下添加或创建attrs文件,如下: <?xml version="1.0" encoding="utf-8"?> <re ...

  4. android view z总结的好帖子

    http://www.cnblogs.com/hawkon/p/3593709.html 转自:http://blog.csdn.net/shulianghan/article/details/180 ...

  5. Android滑动页面 底部小圆点,Android ViewPager无限循环实现底部小圆点动态滑动

    页面拖动到最后一页 再向下滑动回复到 第一页,第一页向前滑动回到 最后一页 同时,底部红色小圆点随着页面的滑动距离比例随时改变位置 布局: xmlns:android="http://sch ...

  6. Android 上下滚动的广告条

    有些应用里面会有一些上下滚动文字的广告,尤其是关于商城里面的容易出现,具体的效果相比大家也见过,先看看效果吧 这是怎么实现的呢,有人说是用TextView实现,有的说这是跑马灯效果.其实说TextVi ...

  7. 【Android View事件分发机制】滑动冲突

    View内容滑动概念 scrollTo scrollBy scrollTo(x,y) x,y 是绝对值,如果x,y不变,重复调用是不会移动的. scrollBy(x,y) x,y是增量之,每次调用都会 ...

  8. 【Android View绘制之旅】Layout过程

    1.为什么要进行Layout? 在[Android View绘制之旅]View之测量Measure过程后,View我们得到View的宽高,但光只有宽高值是不足以反映视图的,更需要知道View所在的位置 ...

  9. 监听ListView滚动到最底部

    监听ListView滚动到最底部 监听ListView的滚动可以用两个东西: ListView.onScrollStateChanged (本文讲解这个listener的使用) 在OnGestureL ...

最新文章

  1. C#操作SQLite 报错 (Attempt to write a read-only database)
  2. 软件使用说明书模板_想要快速定制表单模板?请收下这份浩辰3D设计攻略
  3. /usr/bin/ld: cannot find -lmysqlclient_r
  4. Toast的另类应用及另类“拦截”Home键
  5. 网游类似魔兽世界的服务器维护都是在干嘛?
  6. 【PAT甲级 排序】1012 The Best Rank (25 分) C++ 全部AC
  7. [C++] Pure Virtual Function and Abstract Class
  8. 【python问题系列--4】ValueError: operands could not be broadcast together with shapes (100,3) (3,1)...
  9. ios 进入后台 一段时间在进入前台 动画消失
  10. zul使用java_java – 从Jar加载ZUL
  11. 从零到百亿互网融构展
  12. WIN间远程桌面连接:你的凭据不工作解决(亲测有效)
  13. 微信小游戏和微信小程序的区别与共同
  14. Arduino基础入门篇26—步进电机
  15. 苹果app商品定价_苹果将调整应用商店定价:中国区应用最低价涨至8元
  16. mysql 替换 斜杠_Mysql like查询语句中,结果包含反斜杠 \ 字符的,需要替换成四个反斜杠 \\\\...
  17. Redhat最小化安装后安装图形界面步骤
  18. 点击劫持漏洞修复(前端、后端)
  19. python 代码合并txt文件
  20. JAVA实现简易的图书管理系统(含过程)

热门文章

  1. c语言switch为什么要加break,c语言学习笔记 switch case语句为什么要加break
  2. linux svn cleanup 用法,SVN命令之清理命令(clean up)的功能及使用技巧
  3. 文件I0通用的IO模型
  4. mysql 学习笔记08 日期相关函数2
  5. 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
  6. 1074. Reversing Linked List (25)
  7. html5跨平台桌面打包,Html5到跨平台app应用
  8. k8s的ingress使用
  9. 微信公众号接入开发者模式,服务器配置Token验证
  10. Maven Web项目解决跨域问题