欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-04 20:32:40
 本文实例为大家分享了android scrollview实现拖动回弹效果的具体代码,供大家参考,具体内容如下 原理 在android2.3版本中,view类...

原理

在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);  
 } 
} 

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