仿ios listview反弹效果

本文介绍如何在Android中实现类似iOS的反弹效果。通过重写ListView的overScrollBy方法,并设置maxOverScrollY值,使ListView在滑动到边界时产生回弹动画。提供了一个具体的BaseListView实现案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    前几天项目中要用到ios自带的反弹效果,就去看了下源码,其实我们android,反弹效果是有的,方法和实现都写好了。。。。。

    整个实现重点在overScrollBy这个方法上,当你滚动listview时会触发此事件,它会根据表头或表尾的坐标,及你所给的maxOverScrollY最大滚动纵坐标值来计算listview的表头或表尾的坐标。   

    默认的ListView的overScrollBy方法中maxOverScrollY=0;所以你只能看到在表头或表尾有一条带颜色的线闪灯,据说,这是为了避免IOS的专利....

    下面来看实现方式:

    MainActivity.java:

public class MainActivity extends Activity<span></span> {
 
     private BaseListView listview;
 
     @Override
     protected void onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         requestWindowFeature(Window.FEATURE_NO_TITLE);
         setContentView(R.layout.activity_main);
         listview = (BaseListView) findViewById(R.id.mylistview);
         ArrayAdapter<String> adapter = new ArrayAdapter<String>( this , android.R.layout.simple_expandable_list_item_1, new String[] { "A" , "A" , "A" , "A" , "A" , "A" , "A" , "A" , "A" });
         listview.setAdapter(adapter);
     }
 
}

?
     这个是重点 
     BaseListView.java 
?
public class BaseListView extends ListView
{
     private static final int MAX_Y_OVERSCROLL_DISTANCE = 200 ;
 
     private Context mContext;
     private int mMaxYOverscrollDistance;
 
     public BaseListView(Context context)
     {
         super (context);
         mContext = context;
         initBounceListView();
     }
 
     public BaseListView(Context context, AttributeSet attrs)
     {
         super (context, attrs);
         mContext = context;
         initBounceListView();
     }
 
     public BaseListView(Context context, AttributeSet attrs, int defStyle)
     {
         super (context, attrs, defStyle);
         mContext = context;
         initBounceListView();
     }
 
     private void initBounceListView()
     {
 
         final DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
         final float density = metrics.density;
 
         mMaxYOverscrollDistance = ( int ) (density * MAX_Y_OVERSCROLL_DISTANCE);
     }
 
     @Override
     protected boolean overScrollBy( int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)
     {
         return super .overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxYOverscrollDistance, isTouchEvent);
     }
     
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值