废话不多说了,直接给大家贴代码了,具体代码如下所示:
public class BounceBackViewPager extends ViewPager {
private int currentPosition = 0;
private Rect mRect = new Rect();//用来记录初始位置
private boolean handleDefault = true;
private float preX = 0f;
private static final float RATIO = 0.5f;//摩擦系数
private static final float SCROLL_WIDTH = 10f;
public BounceBackViewPager(Context context) {
super(context);
}
public BounceBackViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
return super.dispatchKeyEvent(event);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
preX = ev.getX();//记录起点
currentPosition = getCurrentItem();
}
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_UP:
onTouchActionUp();
break;
case MotionEvent.ACTION_MOVE:
if (getAdapter().getCount() == 1) {
float nowX = ev.getX();
float offset = nowX - preX;
preX = nowX;
if (offset > SCROLL_WIDTH) {//手指滑动的距离大于设定值
whetherConditionIsRight(offset);
} else if (offset < -SCROLL_WIDTH) {
whetherConditionIsRight(offset);
} else if (!handleDefault) {//这种情况是已经出现缓冲区域了,手指慢慢恢复的情况
if (getLeft() + (int) (offset * RATIO) != mRect.left) {
layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom());
}
}
} else if ((currentPosition == 0 || currentPosition == getAdapter().getCount() - 1)) {
float nowX = ev.getX();
float offset = nowX - preX;
preX = nowX;
if (currentPosition == 0) {
if (offset > SCROLL_WIDTH) {//手指滑动的距离大于设定值
whetherConditionIsRight(offset);
} else if (!handleDefault) {//这种情况是已经出现缓冲区域了,手指慢慢恢复的情况
if (getLeft() + (int) (offset * RATIO) >= mRect.left) {
layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom());
}
}
} else {
if (offset < -SCROLL_WIDTH) {
whetherConditionIsRight(offset);
} else if (!handleDefault) {
if (getRight() + (int) (offset * RATIO) <= mRect.right) {
layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom());
}
}
}
} else {
handleDefault = true;
}
if (!handleDefault) {
return true;
}
break;
default:
break;
}
return super.onTouchEvent(ev);
}
private void whetherConditionIsRight(float offset) {
if (mRect.isEmpty()) {
mRect.set(getLeft(), getTop(), getRight(), getBottom());
}
handleDefault = false;
layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom());
}
private void onTouchActionUp() {
if (!mRect.isEmpty()) {
recoveryPosition();
}
}
private void recoveryPosition() {
TranslateAnimation ta = new TranslateAnimation(getLeft(), mRect.left, 0, 0);
ta.setDuration(300);
startAnimation(ta);
layout(mRect.left, mRect.top, mRect.right, mRect.bottom);
mRect.setEmpty();
handleDefault = true;
}
}
以上所述是小编给大家介绍的Android 实现ViewPager边界回弹效果实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# viewpager回弹
# android
# viewpager
# Android仿IOS回弹效果 支持任何控件
# Android ScrollView实现横向和竖向拖动回弹效果
# Android ScrollView的顶部下拉和底部上拉回弹效果
# Android自定义ScrollView实现放大回弹效果
# Android自定义ScrollView实现放大回弹效果实例代码
# Android界面上拉下拉的回弹效果实例代码
# android仿QQ个人主页下拉回弹效果
# Android RecyclerView上拉加载更多功能回弹实现代码
# Android ReboundScrollView仿IOS拖拽回弹效果
# Android编程ViewPager回弹效果实例分析
# Android自定义控件仿ios下拉回弹效果
# 给大家
# 这种情况
# 小编
# 在此
# 说了
# 不多
# 所示
# 所述
# 给我留言
# 感谢大家
# 疑问请
# 有任何
# SCROLL_WIDTH
# Context
# RATIO
# preX
# float
# final
# static
# KeyEvent
相关文章:
微信推文制作网站有哪些,怎么做微信推文,急?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
如何在Golang中指定模块版本_使用go.mod控制版本号
北京网站制作公司哪家好一点,北京租房网站有哪些?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
网站制作壁纸教程视频,电脑壁纸网站?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
如何在IIS中新建站点并配置端口与IP地址?
如何在阿里云通过域名搭建网站?
ui设计制作网站有哪些,手机UI设计网址吗?
建站上传速度慢?如何优化加速网站加载效率?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
智能起名网站制作软件有哪些,制作logo的软件?
如何通过虚拟主机空间快速建站?
如何快速搭建安全的FTP站点?
创业网站制作流程,创业网站可靠吗?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
如何批量查询域名的建站时间记录?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何在橙子建站中快速调整背景颜色?
微信h5制作网站有哪些,免费微信H5页面制作工具?
建站之星后台密码遗忘如何找回?
Android自定义控件实现温度旋转按钮效果
Bpmn 2.0的XML文件怎么画流程图
佛山网站制作系统,佛山企业变更地址网上办理步骤?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
,网站推广常用方法?
建站10G流量真的够用吗?如何应对访问高峰?
公司网站制作价格怎么算,公司办个官网需要多少钱?
宝塔面板如何快速创建新站点?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
Android使用GridView实现日历的简单功能
官网建站费用明细查询_企业建站套餐价格及收费标准指南
Swift中switch语句区间和元组模式匹配
小型网站建站如何选择虚拟主机?
如何配置支付宝与微信支付功能?
如何选择域名并搭建高效网站?
微信小程序 五星评分(包括半颗星评分)实例代码
,如何利用word制作宣传手册?
如何在Ubuntu系统下快速搭建WordPress个人网站?
高防服务器租用首荐平台,企业级优惠套餐快速部署
制作网站的基本流程,设计网站的软件是什么?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
,怎么在广州志愿者网站注册?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何通过wdcp面板快速创建网站?
css网站制作参考文献有哪些,易聊怎么注册?
*请认真填写需求信息,我们会在24小时内与您取得联系。