android 头部伸缩动画,Android中ScrollView 滑到头部或尾部可伸缩放大效果

最近做项目,想要这么一个效果,就是ScrollView 滑动到顶部,当不能在滑动的时候,图片可以下拉放大,松开又恢复。滑到底部没有内容的时候,也有伸缩效果,先看看效果图吧。

d216a1db07e630f76dff524c4ebc7a98.gif

就是如上图这么个效果。系统提供的ScrollView 是不能做到这个效果的,所以需要自己自定义,网上找了一些资料。也参考了下其他人的做法。自己也整合了一下。希望对大家有所帮助。

核心的控件就是下面的这段代码:

package com.kokjuis.travel.customView;

import android.animation.ObjectAnimator;

import android.animation.ValueAnimator;

import android.content.Context;

import android.graphics.Rect;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.view.View;

import android.view.ViewGroup;

import android.view.animation.TranslateAnimation;

import android.widget.ScrollView;

/**

* 注意使用的时候需要放大的view,一般是第一个RelativeLayout或者LinearLayout。要加上 android:layout_gravity="center_horizontal"

*

* Created by kokJuis on 2017/3/14. [email protected]

*/

public class BounceZoomScrollView extends ScrollView {

private static final String TAG = "BounceScrollView";

//----头部收缩属性--------

// 记录首次按下位置

private float mFirstPosition = 0;

// 头部图片是否正在放大

private Boolean mScaling = false;

private View dropZoomView;//需要被放大的view

private int dropZoomViewWidth;

private int dropZoomViewHeight;

//----头部收缩属性end--------

//------尾部收缩属性--------

private View inner;// 子View

private float y;// 点击时y坐标

private Rect normal = new Rect();// 矩形(这里只是个形式,只是用于判断是否需要动画.)

private boolean isCount = false;// 是否开始计算

//最后的坐标

private float lastX = 0;

private float lastY = 0;

//当前坐标

private float currentX = 0;

private float currentY = 0;

//移动的坐标量

private float distanceX = 0;

private float distanceY = 0;

private boolean upDownSlide = false; //判断上下滑动的flag

//------尾部收缩属性end--------

public BounceScrollView(Context context, AttributeSet attrs) {

super(context, attrs);

}

//初始化

private void ini

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值