当前位置: 移动技术网 > IT编程>移动开发>Android > Android ScrollView实现横向和竖向拖动回弹效果

Android ScrollView实现横向和竖向拖动回弹效果

2019年08月02日  | 移动技术网IT编程  | 我要评论

浓淡由它冰雪中,张飞跃事件,说出你的故事陈思成

原理

在android2.3版本中,view类中新增了一个方法:overscrollby。通过覆盖该方法,就可以达到阻尼回弹的效果。

示例1、竖向滚动 

public class reboundscrollview extends scrollview{ 
 private static final int max_scroll = 200; 
 private static final float scroll_ratio = 0.5f;// 阻尼系数 
  
 public reboundscrollview(context context) 
 { 
  super(context); 
 } 
 
 public reboundscrollview(context context, attributeset attrs) 
 { 
  super(context, attrs); 
 } 
 
 public reboundscrollview(context context, attributeset attrs, int defstyle) 
 { 
  super(context, attrs, defstyle); 
 } 
  
 @override 
 protected boolean overscrollby(int deltax, int deltay, int scrollx, int scrolly, int scrollrangex, int scrollrangey, int maxoverscrollx, int maxoverscrolly, boolean istouchevent) 
 {  
  int newdeltay = deltay; 
  int delta = (int) (deltay * scroll_ratio); 
  if((scrolly+deltay)==0 || (scrolly-scrollrangey+deltay)==0){ 
   newdeltay = deltay;  //回弹最后一次滚动,复位 
  }else{ 
   newdeltay = delta;  //增加阻尼效果 
  } 
  return super.overscrollby(deltax, newdeltay, scrollx, scrolly, scrollrangex, scrollrangey, maxoverscrollx, max_scroll, istouchevent);  
 } 
} 

示例2、横向滚动

public class reboundhscrollview extends horizontalscrollview{ 
 private static final int max_scroll = 200; 
 private static final float scroll_ratio = 0.5f;// 阻尼系数 
  
 public reboundhscrollview(context context) 
 { 
  super(context); 
 } 
 
 public reboundhscrollview(context context, attributeset attrs) 
 { 
  super(context, attrs); 
 } 
 
 public reboundhscrollview(context context, attributeset attrs, int defstyle) 
 { 
  super(context, attrs, defstyle); 
 } 
  
 @override 
 protected boolean overscrollby(int deltax, int deltay, int scrollx, int scrolly, int scrollrangex, int scrollrangey, int maxoverscrollx, int maxoverscrolly, boolean istouchevent) 
 {  
  int newdeltax = deltax; 
  int delta = (int) (deltax * scroll_ratio); 
  if((scrollx+deltax)==0 || (scrollx-scrollrangex+deltax)==0){ 
   newdeltax = deltax;  //回弹最后一次滚动,复位 
  }else{ 
   newdeltax = delta;  //增加阻尼效果 
  } 
  return super.overscrollby(newdeltax, deltay, scrollx, scrolly, scrollrangex, scrollrangey, max_scroll, maxoverscrolly, istouchevent);  
 } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网