android怎么自定义滚动上下回弹scollView
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章主要介绍"android怎么自定义滚动上下回弹scollView",在日常操作中,相信很多人在android怎么自定义滚动上下回弹scollView问题上存在疑惑,小编查阅了各式资料,整理出简
千家信息网最后更新 2025年11月11日android怎么自定义滚动上下回弹scollView
这篇文章主要介绍"android怎么自定义滚动上下回弹scollView",在日常操作中,相信很多人在android怎么自定义滚动上下回弹scollView问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"android怎么自定义滚动上下回弹scollView"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
这是一个自定义view,在xml布局中用这个view嵌套要使之可以上下回弹的view
就能实现布局可以滚动上下回弹了,自定义view代码如下:
package com.loopfire.meitaotao.view.scrollView; import android.content.Context;import android.graphics.Rect;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.view.animation.TranslateAnimation;import android.widget.ScrollView; /** * 上下回弹 scollView * * @author Administrator * */public class MyScrollView extends ScrollView { private View inner; private float y; private Rect normal = new Rect(); private boolean animationFinish = true; public MyScrollView(Context context) { super(context); } public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onFinishInflate() { if (getChildCount() > 0) { inner = getChildAt(0); } } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { if (inner == null) { return super.onTouchEvent(ev); } else { commOnTouchEvent(ev); } return super.onTouchEvent(ev); } private void commOnTouchEvent(MotionEvent ev) { if (animationFinish) { int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: // System.out.println("ACTION_DOWN"); y = ev.getY(); super.onTouchEvent(ev); break; case MotionEvent.ACTION_UP: // System.out.println("ACTION_UP"); y = 0; if (isNeedAnimation()) { animation(); } super.onTouchEvent(ev); break; case MotionEvent.ACTION_MOVE: // System.out.println("ACTION_MOVE"); final float preY = y == 0 ? ev.getY() : y; float nowY = ev.getY(); int deltaY = (int) (preY - nowY); // 滚动 // scrollBy(0, deltaY); y = nowY; // 当滚动到最上或者最下时就不会再滚动,这时移动布局 if (isNeedMove()) { if (normal.isEmpty()) { // 保存正常的布局位置 normal.set(inner.getLeft(), inner.getTop(), inner.getRight(), inner.getBottom()); } // 移动布局 inner.layout(inner.getLeft(), inner.getTop() - deltaY / 2, inner.getRight(), inner.getBottom() - deltaY / 2); } else { super.onTouchEvent(ev); } break; default: break; } } } // 开启动画移动 private void animation() { // 开启移动动画 TranslateAnimation ta = new TranslateAnimation(0, 0, 0, normal.top - inner.getTop()); ta.setDuration(200); ta.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { animationFinish = false; } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { inner.clearAnimation(); // 设置回到正常的布局位置 inner.layout(normal.left, normal.top, normal.right, normal.bottom); normal.setEmpty(); animationFinish = true; } }); inner.startAnimation(ta); } // 是否需要开启动画 private boolean isNeedAnimation() { return !normal.isEmpty(); } // 是否需要移动布局 private boolean isNeedMove() { int offset = inner.getMeasuredHeight() - getHeight(); int scrollY = getScrollY(); if (scrollY == 0 || scrollY == offset) { return true; } return false; } }在xml中使用如下:
那么包含的这个textview可以上下滚动并且回弹了
到此,关于"android怎么自定义滚动上下回弹scollView"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
上下
布局
移动
学习
动画
位置
更多
帮助
实用
接下来
中用
代码
文章
方法
理论
知识
篇文章
网站
资料
跟着
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器显卡和主板搭配
视频加速服务器打开了会怎样
数据库中如何删除表格某一行
静安区上门软件开发定制报价表
weka自带的数据库
湛江互联网科技金融企业办理
电脑软件开发年龄限制
陕西鹏程网络技术学校
提升网络安全的水位
软件开发过程中管理类文档
网络安全小论文的结论
网络技术教学入门
南医大数据库校外
怎样查看自己的手机服务器id
下列不属于网络安全法在完善
网络安全 职称
mac可以运行数据库吗
python网页读取数据库
如何搞好网络安全文章
原神换服务器之后原来的还能用吗
软件开发技术能力要求
日立电梯服务器故障怎么看
网络技术试题类型
互联网的服务器是干啥的
云日记的mysql数据库怎样建
机关单位的服务器是什么
北京新希望网络技术有限公司
csgo链接到游戏服务器失败
涛思数据库价格
软件开发跳槽到国企