文档章节

android 自定义ListView仿IOS"阻尼"效果

贺路的路
 贺路的路
发布于 2013/07/19 00:30
字数 366
阅读 8412
收藏 33

    今天又在IOS上看到列表的"阻尼"效果,就是列表拉到表头或者表尾时,还可以继续往上或往下拉,松开手后,整个列表会弹回去,来看效果图:
   
  
   
    整个实现重点在overScrollBy这个方法上,当你滚动listview时会触发此事件,它会根据表头或表尾的坐标,及你所给的maxOverScrollY最大滚动纵坐标值来计算listview的表头或表尾的坐标。
  
    默认的ListView的overScrollBy方法中maxOverScrollY=0;所以你只能看到在表头或表尾有一条带颜色的线闪灯,据说,这是为了避免IOS的专利....

    下面来看实现方式:

   activity_main.xml:

<com.example.tt.BaseListView
        android:id="@+id/mylistview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.example.tt.BaseListView>

    MainActivity.java:

public class MainActivity extends Activity {

	private BaseListView listview;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		listview = (BaseListView) findViewById(R.id.mylistview);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, new String[] { "A", "A", "A", "A", "A", "A", "A", "A", "A"});
		listview.setAdapter(adapter);
	}

}
     这个是重点
     BaseListView.java
public class BaseListView extends ListView
{
	private static final int MAX_Y_OVERSCROLL_DISTANCE = 200;

	private Context mContext;
	private int mMaxYOverscrollDistance;

	public BaseListView(Context context)
	{
		super(context);
		mContext = context;
		initBounceListView();
	}

	public BaseListView(Context context, AttributeSet attrs)
	{
		super(context, attrs);
		mContext = context;
		initBounceListView();
	}

	public BaseListView(Context context, AttributeSet attrs, int defStyle)
	{
		super(context, attrs, defStyle);
		mContext = context;
		initBounceListView();
	}

	private void initBounceListView()
	{

		final DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
		final float density = metrics.density;

		mMaxYOverscrollDistance = (int) (density * MAX_Y_OVERSCROLL_DISTANCE);
	}

	@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, mMaxYOverscrollDistance, isTouchEvent);
	}
	
}

   我的博客其它文章列表
   http://my.oschina.net/helu


© 著作权归作者所有

贺路的路
粉丝 62
博文 70
码字总数 30472
作品 0
广州
程序员
私信 提问
加载中

评论(7)

贺路的路
贺路的路 博主

引用来自“肾虚道长”的评论

没有错误,他就是有时会被卡信上不去,停在那里 我的android 是4.4的

把那几个变量打印出来看看 有什么不对的
肾虚道长
肾虚道长
没有错误,他就是有时会被卡信上不去,停在那里 我的android 是4.4的
贺路的路
贺路的路 博主

引用来自“肾虚道长”的评论

不对呀,我用你这个,有时会被卡住,就停在最大距离那,但点击Item 项的时候,出错位了

错误贴出来 = =
肾虚道长
肾虚道长
不对呀,我用你这个,有时会被卡住,就停在最大距离那,但点击Item 项的时候,出错位了
shark0017
shark0017
只有提高api才可修正
shark0017
shark0017
@Override
39
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)
40
{
41
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxYOverscrollDistance, isTouchEvent);
42
}
复写的时候出错,不理解。似乎是api的问题
Ice_Soul
Ice_Soul
很好,对于代码多谢注释就好了,新手好学
基于原生的移动跨平台研究和实践

基于原生主要是针对基于webview+h5比较来说的,基于H5的我不想再讨论了,我想尝试的是从UI到功能都是原生,而不是用H5模拟的所谓原生体验。 背景 我们从开发角度来考虑,但凡想从事长远的开发...

voxer
2017/03/26
150
0
fir.im Weekly - iOS 开发中的 Git 流程

本期 fir.im Weekly 收集了微博上的热转资源,包含 Android、iOS 开发工具、源码等好用的轮子,还有一些 APP 设计的 Tips,希望对你有用。 精仿知乎日报 iOS 端 @我偏笑_NSNirvana花了将近一...

风起云飞fir_im
2015/11/03
98
0
Android 自带阻尼效果的ScrollView,仿ios效果

百度一下很多阻尼的ScrollView,但是阻尼效果看起来比较生硬,不够圆润,在体验ios的时候,发现那边做的拖动效果貌似还不错,所以就百度了一个阻尼的ScrollView的代码,再改了一下,效果感觉...

她叫我小渝
2017/10/19
169
0
NativeScript 3.3.0 发布,Native 跨平台应用

NativeScript 3.3.0 已发布,NativeScript 可以使用 Javascript,CSS, XML 创建真正的 Native 跨平台应用,支持 iOS Android,NativeScript 将跨平台代码翻译成目标平台的代码。 修复 (# 495...

王练
2017/10/26
1K
10
在Android中自定义IOS风格的按钮

IOS风格的UI比较流行,很多Android的UI设计者也愿意将Android的UI设计成类似IOS系统的UI风格。下面是一个例子,说明如何使用Shape来定义一个IOS风格的按钮。 定义一个iosbuttongrouped.xml。...

迷途d书童
2012/03/21
987
0

没有更多内容

加载失败,请刷新页面

加载更多

Dubbo-自适应拓展机制

背景 在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等,这些都是Dubbo的基础组件。这些基础组件的拓展不是在系统框架启动阶段被加载,而是拓展方...

rock-man
38分钟前
6
0
Kali安装fcitx输入法(五笔)

安装fcitx > sudo apt-get install fcitx-rime fcitx-config-gtk3 重启 > sudo reboot fcitx配置 效果就是这样 配置输入法切换 系统设置...

yeahlife
40分钟前
4
0
IE之css3效果兼容

本文转载于:专业的前端网站▷IE之css3效果兼容 一、兼容css阴影效果(ie滤镜) 1.Shadow,阴影 .shadow { -moz-box-shadow: 3px 3px 4px #000; -webkit-box-shadow: 3px 3px 4px #000; box-sha...

前端老手
43分钟前
4
0
NiushopB2C开源商城功能列表说明:

B2C单商户免费版:PC商城+微商城 B2C单商户标准版:PC商城+微商城组合套餐+阶梯优惠核销功能 B2C单商户企业版:PC商城+微商城拼团+组合套餐阶梯优惠+核销功能 B2C单商户分销版:PC商城+微商城...

niushop-芳
44分钟前
4
0
图片如何转GIF图片呢

如何将生活中拍摄的好玩有趣的图片制作成GIF动图呢?相信很多小伙伴都不知道要如何制作,其实制作方法非常的简单,下面分享一个图片转GIF动图的方法,希望这个方法能够帮助大家在与好友斗图时...

白米稀饭2019
51分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部