介绍
这篇文章给大家介绍怎么在Android中利用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,/* *, ,*注意使用的时候需要放大的观点,一般是第一个RelativeLayout或者LinearLayout。要加上,android: layout_gravity=癱enter_horizontal", ,* & lt; p>, ,* Created by  kokJuis 提醒2017/3/14只189155278 @qq.com ,*/public class  BounceZoomScrollView extends ScrollView  {, ,private static  final String  TAG =,“BounceScrollView",, ,//- - - - -头部收缩属性- - - - - - - - - -, ,//记录首次按下位置, ,private float mFirstPosition =, 0;, ,//头部图片是否正在放大, ,private Boolean mScaling =,假的,, ,private View  dropZoomView;//需要被放大的View ,private int dropZoomViewWidth; ,private int dropZoomViewHeight; ,//- - - - -头部收缩属性结束- - - - - - - - - -, ,//- - - - - -尾部收缩属性- - - - - - - - - -, ,private View 内;//,子View ,private float y;//,点击时y坐标, ,private Rect normal =, new 矩形();//,矩形(这里只是个形式,只是用于判断是否需要动画), ,private boolean isCount =,假;//,是否开始计算, ,//最后的坐标, ,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 =,假的,,//判断上下滑动的flag ,//- - - - - -尾部收缩属性结束- - - - - - - - - -, ,public BounceScrollView (Context 上下文,AttributeSet attrs), {, ,超级(上下文,attrs);, }大敌; ,//初始化, ,private void  init (), {, ,setOverScrollMode (OVER_SCROLL_NEVER);, ,if (getChildAt (0), !=, null), {, 时间=inner 才能;getChildAt(0);//这个是底部收缩的view //头才能部收缩的, ViewGroup 才能;vg =, (ViewGroup), getChildAt (0),, if 才能;(vg.getChildAt (0), !=, null), {, 时间=dropZoomView 才能;vg.getChildAt (0),, ,,}, }大敌; }大敌;/* * *大敌; ,*生成视图工作完成。该函数在生成视图的最后调用,在所有子视图添加完之后只即使子类覆盖了,onFinishInflate ,*方法,也应该调用父类的方法,使该方法得以执行又是; ,*/,@Override ,protected void  onFinishInflate (), {, ,//初始化, ,init (); ,super.onFinishInflate (),, }大敌; ,@Override ,public boolean  dispatchTouchEvent (MotionEvent ev), {, ,//这里只是计算尾部坐标,=,,currentX  ev.getX (),,=,,currentY  ev.getY (),, ,switch (ev.getAction ()), {, case 才能;MotionEvent.ACTION_MOVE:, distanceX 才能=,currentX 作用;lastX;, distanceY 才能=,currentY 作用;lastY;, if 才能;(Math.abs (distanceX), & lt;, Math.abs (distanceY),,,, Math.abs (distanceY),祝辞,12),{, ,,upDownSlide =,真的,, ,,}, ,,休息; }大敌;=,,lastX  currentX;,=,lastY 当前y坐标,, ,if (upDownSlide ,,, inner !=, null), commOnTouchEvent (ev),, ,return super.dispatchTouchEvent (ev),, }大敌;/* * *大敌; ,*触摸事件, *大敌; ,* @param ev ,*/,public void  commOnTouchEvent (MotionEvent ev), {, ,//头部缩放计算, ,if (dropZoomViewWidth & lt;=, 0, | |, dropZoomViewHeight & lt;=, 0), {, dropZoomViewWidth 才能=,dropZoomView.getMeasuredWidth (),, dropZoomViewHeight 才能=,dropZoomView.getMeasuredHeight (),, }大敌; ,switch (ev.getAction ()), {, case 才能;MotionEvent.ACTION_UP:,//手才能指离开后头部恢复图片, null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null怎么在Android中利用ScrollView实现一个伸缩放大效果