博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android View滚动、拉伸到顶/底部弹性回弹复位
阅读量:6249 次
发布时间:2019-06-22

本文共 2669 字,大约阅读时间需要 8 分钟。



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

我在上一篇文章介绍了如何实现一个Android ListView拉到顶/底部后,像橡皮筋一样弹性回弹复位(《Android ListView拉到顶/底部,像橡皮筋一样弹性回弹复位》,文章链接地址: )。事实上,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")	@Override	protected 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:

测试:

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 {	@Override	protected 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://xigia.baihongyu.com/

你可能感兴趣的文章
科技创业捷径 网络电话进军通信大道至简
查看>>
【云和恩墨大讲堂】复合索引与绑定变量
查看>>
聚焦服务器行业,看美国独立服务器优势
查看>>
iOS开发之山寨版新浪微博小结
查看>>
美国教授:Facebook等社交媒体的使用将对美国经济造成负面影响
查看>>
呼叫中心质检团队的“重要性”
查看>>
360良医2.0 一个规范的智能医疗信息平台,才能推动互联网医疗
查看>>
React+Redux打造“NEWS EARLY”单页应用 一步步让你理解最前沿技术栈的真谛
查看>>
《Tableau数据可视化实战》——1.6节从剪贴板上粘贴
查看>>
研究人员开发自治 Android 应用创建网状网
查看>>
Google 的总结陈词:Android 是从零开始构建的
查看>>
《Adobe Acrobat X中文版经典教程》—第1章1.6节在全屏模式下查看PDF演示文稿
查看>>
《Kali Linux渗透测试的艺术》—8章8.4节啖以重利
查看>>
Mac 环境下 Nginx + Tomcat集群, 测试OK
查看>>
高中生开发 Chrome 插件,帮助色盲患者更为清晰的看到网上图片
查看>>
《ANSYS Workbench 14有限元分析自学手册》——1.2 ANSYS Workbench分析的基本过程
查看>>
log4jdbc 数据库访问日志框架使用
查看>>
《Stata统计分析与应用(第2版)》一第2章 Stata中的数据处理
查看>>
《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——2.7 消除歌曲中某个合音或乐器...
查看>>
谁是 2015 年推动开源技术的十大领军人物?
查看>>