android仿照ipone的弹性效果

本文介绍了一个自定义的Android ListView组件——BounceListView,该组件模仿了iOS的弹性滚动效果。通过调整最大滚动偏移距离实现跨平台一致的用户体验,并提供了一个简单的示例应用程序来展示其用法。

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

android仿照ipone的弹性效果

package  com.example.bounce;
 
import  android.content.Context;
import  android.util.AttributeSet;
import  android.util.DisplayMetrics;
import  android.widget.ListView;
  
public  class  BounceListView extends  ListView{
     private  static  final  int  MAX_Y_OVERSCROLL_DISTANCE = 200 ;
      
     private  Context mContext;
     private  int  mMaxYOverscrollDistance;
      
     public  BounceListView(Context context){
         super (context);
         mContext = context;
         initBounceListView();
     }
      
     public  BounceListView(Context context, AttributeSet attrs){
         super (context, attrs);
         mContext = context;
         initBounceListView();
     }
      
     public  BounceListView(Context context, AttributeSet attrs, int  defStyle){
         super (context, attrs, defStyle);
         mContext = context;
         initBounceListView();
     }
      
     private  void  initBounceListView(){
         //get the density of the screen and do some maths with it on the max overscroll distance
         //variable so that you get similar behaviors no matter what the screen size
          
         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){
         //This is where the magic happens, we have replaced the incoming maxOverScrollY with our own custom variable mMaxYOverscrollDistance;
         return  super .overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxYOverscrollDistance, isTouchEvent); 
     }
      
}

  

package  com.example.bounce;
import  java.util.ArrayList;
import  java.util.List;
 
import  android.app.Activity;
import  android.os.Bundle;
import  android.widget.ArrayAdapter;
  
public  class  BounceListViewActivity extends  Activity {
     /** Called when the activity is first created. */
     @Override
     public  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_bounce_list_view);
         BounceListView mBounceLv = (BounceListView)findViewById(R.id.list);
         mBounceLv.setAdapter( new  ArrayAdapter<String>( this ,android.R.layout.simple_list_item_1,getData()));
     }
     private  List<String> getData(){
          
         List<String> data = new  ArrayList<String>();
         data.add( "测试数据1" );
         data.add( "测试数据2" );
         data.add( "测试数据3" );
         data.add( "测试数据4" );
         data.add( "测试数据5" );
         data.add( "测试数据6" );
         data.add( "测试数据7" );
         data.add( "测试数据8" );
         data.add( "测试数据9" );
         data.add( "测试数据10" );
         data.add( "测试数据11" );
         data.add( "测试数据12" );
         data.add( "测试数据13" );
         return  data;
     }
}

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值