android 阻尼回弹,Android ListView实现阻尼回弹效果 并去除边缘阴影
使用ListView将位置拖到顶部和底部默认是没有回弹效果的,为了增加这个效果,方法如下:
1、开启overScrollMode为always
在布局中 android:overScrollMode="always"
或在代码中 setOverScrollMode(View.OVER_SCROLL_ALWAYS);
2、继承listview 覆盖overScrollBy方法,并且利用反射机制修改阴影效果为透明
public class PullListview extends ListView {
private static final int MAX_Y_OVERSCROLL_DISTANCE = 100;
private Context mContext;
private int mMaxYOverscrollDistance;
public PullListview(Context context) {
super(context);
mContext = context;
initPullListview();
}
public PullListview(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
initPullListview();
}
public PullListview(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mContext = context;
initPullListview();
}
private void initPullListview() {
// get the density of the screen and do some maths with it on the max
// overscroll distance
// variable so that you get similar behaviors no matter what the screen
// size
final DisplayMetrics metrics = mContext.getResources()
.getDisplayMetrics();
final float density = metrics.density;
mMaxYOverscrollDistance = (int)(density * MAX_Y_OVERSCROLL_DISTANCE);
// this.setOverScrollMode(View.OVER_SCROLL_ALWAYS);
try {
Class < ? > c = (Class < ? > ) Class.forName(AbsListView.class.getName());
Field egtField = c.getDeclaredField("mEdgeGlowTop");
Field egbBottom = c.getDeclaredField("mEdgeGlowBottom");
egtField.setAccessible(true);
egbBottom.setAccessible(true);
Object egtObject = egtField.get(this); // this 指的是ListiVew实例
Object egbObject = egbBottom.get(this);
// egtObject.getClass() 实际上是一个 EdgeEffect 其中有两个重要属性 mGlow mEdge
// 并且这两个属性都是Drawable类型
Class < ? > cc = (Class < ? > ) Class.forName(egtObject.getClass()
.getName());
Field mGlow = cc.getDeclaredField("mGlow");
mGlow.setAccessible(true);
mGlow.set(egtObject, new ColorDrawable(Color.TRANSPARENT));
mGlow.set(egbObject, new ColorDrawable(Color.TRANSPARENT));
Field mEdge = cc.getDeclaredField("mEdge");
mEdge.setAccessible(true);
mEdge.set(egtObject, new ColorDrawable(Color.TRANSPARENT));
mEdge.set(egbObject, new ColorDrawable(Color.TRANSPARENT));
} catch (Exception e) {
e.printStackTrace();
}
}
@SuppressLint("NewApi")
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX,
int scrollY, int scrollRangeX, int scrollRangeY,
int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
// This is where the magic happens, we have replaced the incoming
// maxOverScrollY with our own custom variable mMaxYOverscrollDistance;
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY,
scrollRangeX, scrollRangeY, maxOverScrollX,
mMaxYOverscrollDistance, isTouchEvent);
}
}
android 阻尼回弹,Android ListView实现阻尼回弹效果 并去除边缘阴影相关推荐
- ListView 实现阻尼回弹效果 并去除边缘阴影
我们使用ListView将位置拖到顶部和底部默认是没有回弹效果的,为了增加这个效果,方法如下: 1.开启overScrollMode为always 在布局中 android:overScrollMod ...
- Android取消RecyclerView、ListView、ScrollView、HorizontalScrollView滑动到边缘闪现灰白色水波纹动画
Android取消RecyclerView.ListView.ScrollView.HorizontalScrollView滑动到边缘闪现灰白色水波纹动画 标准的Android RecyclerVie ...
- Android自定义View之ListView实现时间轴效果:我只是个送快递的。
先上效果图: 实现时间轴的原理 listview的基本使用,相信大家都很熟悉.先在layout下新建一个xml布局文件,对应一个子项的listView的显示内容.在上面的图我们可以看到,每一项都是 有 ...
- android自带下拉阻尼动画,Android实现简单的下拉阻尼效应示例代码
OS的下拉上拉都会出现一个很玄的动态效果.在Android中,虽然可以实现类似的效果,但有点不同的是,如果调用overScrollBy来实现类似的阻尼效应的话,最顶部会出现一片亮的区域,让人感觉不是很 ...
- android 横向滑动 回弹,android ScrollView水平滑动回弹
在研究了View的一些属性之后做了个Scroll的水平滑动回弹. 效果图: 主要代码: import android.content.Context; import android.graphics. ...
- android 底部回弹,Android View滚动、拉伸到顶/底部弹性回弹复位
<Android View滚动.拉伸到顶/底部弹性回弹复位> 我在上一篇文章介绍了如何实现一个Android ListView拉到顶/底部后,像橡皮筋一样弹性回弹复位(<And ...
- Android 模仿QQ抢红包 listView实现
猴年猴赛雷啊各位,今天没吃药我感觉自己萌萌哒! qq和微信和支付宝红包大战,不知道各位的战绩是多少嘞? 反正我qq抢到的都是气泡.因为太不爽,所以自己写一个下拉抢红包自己玩(自己跟自己玩). 先来看效 ...
- android 图片列表,Android 列表使用(ListView GridView Gallery图片计时滚动)
ListView 作用: 1.将数据填充到布局. 2.处理用户的选择点击等操作. 根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAd ...
- [Android]使用RecyclerView替代ListView(四:SeizeRecyclerView)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6641794.html [Android]使用RecyclerV ...
- Android之设置ListView数据显示的动画效果
效果图: 平时我们要实现ListView数据显示时的动画效果,可以使用LayoutAnimationController为ListView设置动画效果,并通过ListView的setLayoutAni ...
最新文章
- 使用java.util.Timer来周期性的执行制定的任务
- js中replace未定义_js中replace的用法
- Non-Blind图像反卷积论文整理
- QT的QDateTimeAxis类的使用
- vim插件自动补齐_VIM自动补全插件:deoplete
- Oracle归档目录 和 DB_RECOVERY_FILE_DEST
- Sourcing Cockpit: 2. Demo of Service Purchase Order
- 01: MySql简介
- r语言 tunerf函数_R语言︱常用统计方法包 机器学习包(名称、简介)
- Linux 命令之 type -- 显示指定命令的类型
- MySQL数据库常用命令_常用SQL语句及命令_MySQL常用语句
- 「十年老测试」测试员的职场之路
- Java——字符编码详细解释
- GPUImageMovieWriter录制视频问题
- mysql 实现row_number_MySQL实现ROW_NUMBER()
- 503.下一个更大元素II(力扣leetcode) 博主可答疑该问题
- PHP(阿里云短信验证码)
- wordpress之模板汉化(poedit的使用技巧 及 .po .mo 批量生成技术)
- cannot allocate memory in static TLS block问题记录
- ArcGIS—数据类型(1):Coverage数据