android怎么自定义滚动上下回弹scollView
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍"android怎么自定义滚动上下回弹scollView",在日常操作中,相信很多人在android怎么自定义滚动上下回弹scollView问题上存在疑惑,小编查阅了各式资料,整理出简
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
软件开发培训哪里机构好
戴尔t620服务器主板型号
计算机三级网络技术大题真题
ssh 进入服务器
网络技术事业单位改革
vb软件开发工具
计算机软件开发培训公司深圳
福建网络安全平台作业答案
恒生科技互联网etf
山西oa软件开发在线咨询
我国网络安全法的先后顺序
数据库文件导出后缀名
伊春市网络安全
电脑怎么改服务器云盘
广东电信服务器租赁
国外软件开发外包平台
软件开发项目和集成类
数据库各个专业平均年龄
网站sql数据库在哪里
数据库主键和外键的代码
数据库变更
挑选网络技术服务行业标准
去哪找气象数据库
柳州游戏软件开发公司电话
开展网络安全监察执法工作
查微博数据库
中国软件开发新科技
湘西网络安全培训班
工厂管理系统的代码数据库
机房服务器安全注意