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



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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript If...Else 语句

条件语句用于基于不同的条件来执行不同的动作。 条件语句 通常在写代码时&#xff0c;您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。 在 JavaScript 中&#xff0c;我们可使用以下条件语句&#xff1a; if 语句 - 只有当指定条件为 true …

使用手机游戏的新闻推送

使用手机游戏的新闻推送——WeCloud 团队 消息推送是游戏开发人员与玩家沟通最直接的桥梁。开发人员能够通过推送一条消息直观地在手机屏幕上把信息传达给玩家。可是因为开发人员一些不恰当推送或者对于推送细节的疏忽大意&#xff0c;使得大多数的玩家都选择了彻底关闭推送消息…

Python -- post方式上传文件

说明 使用第三方库Request&#xff0c;安装方法为&#xff1a; pip install requests 具体安装方法参考http://docs.python-requests.org/en/master/user/install/。 代码 import requestsurl http://127.0.0.1/upload files {file: open(D:/test.apk, rb)} da…

WeakReference与SoftReference

WeakReference与SoftReference都可以用来保存对象的实例引用&#xff0c;这两个类与垃圾回收有关。 WeakReference是弱引用&#xff0c;其中保存的对象实例可以被GC回收掉。这个类通常用于在某处保存对象引用&#xff0c;而又不干扰该对象被GC回收&#xff0c;通常用于Debug、内…

TCP是如何保证包的顺序传输

转自&#xff1a;http://blog.csdn.net/ggxxkkll/article/details/7894112 大家都知道&#xff0c;TCP提供了最可靠的数据传输&#xff0c;它给发送的每个数据包做顺序化&#xff08;这看起来非常烦琐&#xff09;&#xff0c;然而&#xff0c;如果TCP没有这样烦琐的操作&#…

Python文件上传功能简单实现

本文章代码上传在码云上 代码地址 gitgitee.com:DanYuJie/upanddown.git这里我们使用flask框架&#xff0c;简单实用 目录结构&#xff1a; upandown/static/css/js/jquery.min.jstoastr.min.jstemplates/index.htmltest.py 首先我们需要一个页面在templates/index.html(…

Arduino 端口通信实例

// //Arduino 1.0.x-----Arduino Uno----COM9 //使用3-10号引脚连接8个LED // int incomingByte 0; //输入的数据存储变量 int count1; void setup() {Serial.begin(9600);// opens serial port, sets data rate to 9600 bpsfor(int i3;i<10;i)//打开3-10号引脚pinMode(i…

redhat6.4 安装oracle 10g error

环境&#xff1a;操作系统:redhat6.4 64位数据库版本:10.2.0.4 64位搭建测试原因&#xff1a;http://718693.blog.51cto.com/708693/1682945说明&#xff1a;在redhat6.4上安装10.2.0.1 64位接着再升级到10.2.0.4 64位&#xff0c;在执行DBCA报如下错误UnsatisfiedLinkError ex…

sha256---利用java自带的实现加密

利用java自带的实现加密&#xff1a;参考https://jingyan.baidu.com/article/2fb0ba40a2ef2b00f3ec5f74.html /*** 利用java原生的摘要实现SHA256加密* param str 加密后的报文* return*/public static String getSHA256StrJava(String str){MessageDigest messageDigest;Stri…

Flask文件上传

https://zhuanlan.zhihu.com/p/23731819 Flask文件上传&#xff08;一&#xff09;&#xff1a;原生实现 李辉 greyli.com 87 人赞同了该文章 文件上传是个躲不掉的问题&#xff0c;用户头像&#xff0c;文章图片&#xff0c;文件分享等等都需要上传功能。但这里涉及很多内…

Python匿名函数——lambda表达式

如果要定义的函数很简单&#xff0c;一个return语句就能搞定&#xff0c;可以使用lambda表达式来定义&#xff0c; lambda表达式的语法如下&#xff1a; lambda parameters: expressionlambda表达式并不包含return语句&#xff0c;凡是使用函数作为参数或返回值的地方&#xff…

jQuery实现radio第一次点击选中第二次点击取消功能(转)

转载自&#xff1a;http://www.jb51.net/article/113730.htm 由于项目的需求&#xff0c;要求radio点击两次后为取消状态&#xff0c;不方便修改为checkbox&#xff0c;可以用正面的方法实现。 // jquery$(input:radio).click(function(){//alert(this.checked);//var $radio …

简单编码

将一串文本译成密码&#xff0c;密码的规律是&#xff1a; 将原来的小写字母全部翻译成大写字母&#xff0c;大写字母全部翻译成小写字母&#xff0c;数字的翻译规律如下&#xff1a; 0——>9 1——>8 2——>7 3——>6 4——>5 5——>4 6——>3 7——>…

QCon上海2015热点前瞻:Uber伸缩之道、注重实效的性能

QCon上海2015将于10月15日~17日举行。8月16日前报名&#xff0c;可享受8折优惠。\\本次大会设计了15个热点技术专题&#xff0c;涵盖大数据、架构、移动开发、产品设计、安全、团队建设、技术创业等热点话题。我们将邀请业界知名专家&#xff0c;分享他们的实践经验。目前已经确…

工具配置链接

一、idea运行eclipse和myeclipse项目 二、idea中git的使用 三、idea快捷键 转载于:https://www.cnblogs.com/javabeginer/p/7515071.html

C 文件读写 容易疏忽的一个问题

今天需要解决一个问题&#xff0c;将影像瓦片&#xff08;一堆jpg文件&#xff09;分别进行读取&#xff0c;并将所有数据以文件流的方式存入一个.db的文件中&#xff0c; 同时将每个jpg数据在db文件中的位置保存下来&#xff0c;作为index存在.idx文件中。 其中部分代码如下&a…

LNMP里常见的502问题

讲关于nginx的高级配置&#xff0c;在Apache讲了很多关于“用户认证”、“日志”、“重定向”等等操作&#xff0c;当然nginx也会有相同的操作。首先&#xff0c;我们把Discuz在Nginx下实现访问&#xff0c;用之前的域名www.test.com进入目录[rootLampLinux vhosts]# cd /usr/l…

python学习过程中随手写的测试脚本-testloop.py

## 定义list数组lstrs [t1,t2,t3,t4]print(lstrs is,lstrs) i 0## test for loopfor lstr in lstrs: print(lstrs[%d] is % i,lstr ) i i 1print(end for loop) j 0## test while loopwhile j < 3: print(lstrs[%d] is % j,lstrs[j] ) j j 1print(end while loop) k …

jQuery以JSONP的访问调用一个WCF REST服务

JSONP&#xff08;JSON with Padding&#xff09;可以看成是JSON的一种“使用模式”&#xff0c;用以解决“跨域访问”的问题. 下面是一个简单的例子用于模拟如何通过jQuery以JSONP的访问调用一个WCF REST服务。 在这个例子中&#xff0c;我们将定义一个用于返回所有员工信息的…

使用python将excel数据导入数据库

https://www.cnblogs.com/longbigbeard/p/9309180.html 因为需要对数据处理&#xff0c;将excel数据导入到数据库&#xff0c;记录一下过程。使用到的库&#xff1a;xlrd 和 pymysql &#xff08;如果需要写到excel可以使用xlwt&#xff09;直接丢代码&#xff0c;使用python…