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

  介绍

这篇文章给大家介绍怎么在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实现一个伸缩放大效果