Android怎么实现背景图滑动变大松开回弹效果
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要讲解了"Android怎么实现背景图滑动变大松开回弹效果",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Android怎么实现背景图滑动变大
千家信息网最后更新 2025年11月09日Android怎么实现背景图滑动变大松开回弹效果
这篇文章主要讲解了"Android怎么实现背景图滑动变大松开回弹效果",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Android怎么实现背景图滑动变大松开回弹效果"吧!
原图
放大后
1、自定义view继承ScrollView实现效果
public class HeadZoomScrollView extends ScrollView { private View mZoomView; private int mZoomViewWidth; private int mZoomViewHeight; private float firstPosition;//记录第一次按下的位置 private boolean isScrolling;//是否正在缩放 private float mScrollRate = 0.3f;//缩放系数,缩放系数越大,变化的越大 private float mReplyRate = 0.5f;//回调系数,越大,回调越慢 public HeadZoomScrollView(Context context) { super(context); } public HeadZoomScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public HeadZoomScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void setmZoomView(View mZoomView) { this.mZoomView = mZoomView; } public void setmScrollRate(float mScrollRate) { this.mScrollRate = mScrollRate; } public void setmReplyRate(float mReplyRate) { this.mReplyRate = mReplyRate; } @Override protected void onFinishInflate() { super.onFinishInflate(); init(); } private void init() { setOverScrollMode(OVER_SCROLL_NEVER); if (getChildAt(0) != null) { ViewGroup vg = (ViewGroup) getChildAt(0); if (vg.getChildAt(0) != null) { mZoomView = vg.getChildAt(0); } } } @Override public boolean onTouchEvent(MotionEvent ev) { if (mZoomViewWidth <= 0 || mZoomViewHeight <= 0) { mZoomViewWidth = mZoomView.getMeasuredWidth(); mZoomViewHeight = mZoomView.getMeasuredHeight(); } switch (ev.getAction()) { case MotionEvent.ACTION_UP: //手指离开后恢复图片 isScrolling = false; replyImage(); break; case MotionEvent.ACTION_MOVE: if (!isScrolling) { if (getScrollY() == 0) { firstPosition = ev.getY();// 滚动到顶部时记录位置,否则正常返回 } else { break; } } int distance = (int) ((ev.getY() - firstPosition) * mScrollRate); // 滚动距离乘以一个系数 if (distance < 0) { // 当前位置比记录位置要小,正常返回 break; } // 处理放大 isScrolling = true; setZoom(distance); return true; // 返回true表示已经完成触摸事件,不再处理 } return true; } //回弹动画 private void replyImage() { float distance = mZoomView.getMeasuredWidth() - mZoomViewWidth; ValueAnimator valueAnimator = ValueAnimator.ofFloat(distance, 0f).setDuration((long) (distance * mReplyRate)); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { setZoom((Float) animation.getAnimatedValue()); } }); valueAnimator.start(); } public void setZoom(float zoom) { if (mZoomViewWidth <= 0 || mZoomViewHeight <= 0) { return; } ViewGroup.LayoutParams lp = mZoomView.getLayoutParams(); lp.width = (int) (mZoomViewWidth + zoom); lp.height = (int) (mZoomViewHeight * ((mZoomViewWidth + zoom) / mZoomViewWidth)); ((MarginLayoutParams) lp).setMargins(-(lp.width - mZoomViewWidth) / 2, 0, -(lp.width - mZoomViewWidth) / 2, 0); mZoomView.setLayoutParams(lp); }}2、直接布局中使用这个view就可以,要注意的是在布局中需要在自定义view下写一个子控件才能使用
<你的包名.HeadZoomScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drop_down_menu" android:layout_width="match_parent" android:layout_height="match_parent" >
感谢各位的阅读,以上就是"Android怎么实现背景图滑动变大松开回弹效果"的内容了,经过本文的学习后,相信大家对Android怎么实现背景图滑动变大松开回弹效果这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
效果
背景
位置
系数
学习
内容
布局
处理
个子
事件
动画
原图
图片
就是
思路
情况
手指
控件
文章
是在
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
北京天沛时代网络技术
数据库的表新建列后怎么保存
新华网网络安全法
启动数据库至装载状态
机架式服务器机箱哪里有
办公软件开发跟踪
上海哇扑网络技术
连接服务器要求是需要网络吗
网络安全系人民ppt材料
网络安全计划高中英语作文
可以连接数据库的软件
服务器主板寿命
机关开展网络安全工作存在的问题
媒体网络技术与应用
短信网络安全健康教育
计算机网络安全攻击的步骤
wamp 数据库密码
数据库建立约束唯一内容
沈阳三好街电脑城软件开发
阿里斑马网络技术有限公司
网络安全汇演
数据库排序组
贵州网络时间同步服务器云空间
试题选项存数据库
连接不到数据库怎么检查
密云区综合网络技术服务质量保障
将爬取的数据存储到数据库的语句
租云服务器贵么
wind数据库下载历年数据
网站网络安全的意见建议