最近做项目,想要这么一个效果,就是ScrollView 滑动到顶部,当不能在滑动的时候,图片可以下拉放大,松开又恢复。滑到底部没有内容的时候,也有伸缩效果,先看看效果图吧。
就是如上图这么个效果。系统提供的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