我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android怎么实现背景图滑动变大松开回弹效果

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android怎么实现背景图滑动变大松开回弹效果

这篇文章主要讲解了“Android怎么实现背景图滑动变大松开回弹效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android怎么实现背景图滑动变大松开回弹效果”吧!

原图

Android怎么实现背景图滑动变大松开回弹效果

放大后

Android怎么实现背景图滑动变大松开回弹效果

自定义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);    }}

直接布局中使用这个view就可以,要注意的是在布局中需要在自定义view下写一个子控件才能使用

<?xml version="1.0" encoding="utf-8"?><你的包名.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"   >    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="match_parent">        <ImageView            android:id="@+id/iv_show"            android:layout_width="match_parent"            android:layout_height="200dp"            android:layout_weight="1"            android:class="lazy" data-src="@mipmap/ic_launcher"/>    </RelativeLayout></com.example.application.view.HeadZoomScrollView>

感谢各位的阅读,以上就是“Android怎么实现背景图滑动变大松开回弹效果”的内容了,经过本文的学习后,相信大家对Android怎么实现背景图滑动变大松开回弹效果这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android怎么实现背景图滑动变大松开回弹效果

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android怎么实现背景图滑动变大松开回弹效果

这篇文章主要讲解了“Android怎么实现背景图滑动变大松开回弹效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android怎么实现背景图滑动变大松开回弹效果”吧!原图放大后1、自定义v
2023-06-30

Android怎么自定义View实现竖向滑动回弹效果

这篇文章主要介绍“Android怎么自定义View实现竖向滑动回弹效果”,在日常操作中,相信很多人在Android怎么自定义View实现竖向滑动回弹效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Andro
2023-06-30

如何通过纯CSS实现网页的平滑滚动背景图片渐变效果

在现代的网页设计中,丰富的背景效果可以提升网页的美观度和用户体验。其中,平滑滚动和背景图片渐变效果是常用的一种设计方式。本文将介绍如何通过纯CSS实现网页的平滑滚动背景图片渐变效果,并提供具体的代码示例。一、平滑滚动效果首先,我们需要创建一
2023-10-21

怎么在Android应用中实现一个背景可滑动的登录界面效果

怎么在Android应用中实现一个背景可滑动的登录界面效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现思路主要列举一下实现过程过程中遇到的难点。如何使键盘
2023-05-31

使用css3怎么实现一个背景动态渐变效果

使用css3怎么实现一个背景动态渐变效果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。css是什么意思css是一种用来表现HTML或XML等文件样式的计算机语言,主要是用来设计
2023-06-08

如何通过纯CSS实现网页的平滑滚动背景图片放大缩小效果

在现代网页设计中,背景图片是非常常见的元素之一。为了提升网页的视觉效果,我们可以利用CSS来实现背景图片的平滑滚动放大缩小效果,从而给用户带来更好的浏览体验。首先,在HTML中创建一个具有该效果的容器元素:
2023-10-21

Android中怎么利用ViewPager实现图片滑动预览效果

本篇文章给大家分享的是有关Android中怎么利用ViewPager实现图片滑动预览效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。xml代码:
2023-05-30

怎么在Android中利用ScrollView实现一个放大回弹效果

这期内容当中小编将会给大家带来有关怎么在Android中利用ScrollView实现一个放大回弹效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。自定义ScrollView1、创建一个类,继承Scroll
2023-05-31

怎么在Android中使用ScrollView实现一个下拉弹回动画效果

本篇文章给大家分享的是有关怎么在Android中使用ScrollView实现一个下拉弹回动画效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Android是什么Android
2023-05-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录