Android的UI使用HorizontalListView实现水平滑动

  

今天就介绍一个大神级人物自定义的ListView实现水平滑动,我知道要实现一个可以水平滑动的方法有很多,但是这个HorizontalListView用起来是真的很不错! ! !
  

  

先看一下效果图:

  

 Android UI使用HorizontalListView实现水平滑动“> <br/>
  </p>
  <p>界面做的不怎么看得上眼,但是基本的动能还是在的,下面给出HorizontalListView的代码:</p>
  
  <pre类=/*   * HorizontalListView。java v1.5   *   *   * MIT许可   *版权(c) 2011年保罗Soucy (paul@dev-smart.com)公司   *   *特此授予许可,免费的,任何的人获得一份   *这个软件和相关文档的文件(“软件”),交易   *在软件没有限制,包括但不限于权利   *使用、复制、修改、合并、出版、发行、有偿和/或出售   *软件的副本,并允许他们的软件   *提供,应当具备下列条件:   *   *上述版权声明和本许可声明应当包含在   *所有副本或实质性部分的软件。   *   *提供的软件是“是”,没有任何类型的保证,明示或   *暗示的保证,包括但不限于适销性的保证,   *健身为特定目的和无侵犯。在任何事件应当的   *作者或版权所有者承担任何索赔、损害或其他   *责任,无论是在一个动作的合同,侵权或否则,因,   *或与软件或使用或其他交易   *软件。   *   */进口java.util.LinkedList;   进口java.util.Queue;      进口android.content.Context;   进口android.database.DataSetObserver;   进口android.graphics.Rect;   进口android.util.AttributeSet;   进口android.view.GestureDetector;   进口android.view.GestureDetector.OnGestureListener;   进口android.view.MotionEvent;   进口android.view.View;   进口android.widget.AdapterView;   进口android.widget.ListAdapter;   进口android.widget.Scroller;      公开课HorizontalListView延伸AdapterView{      公共布尔mAlwaysOverrideTouch=true;   保护ListAdapter mAdapter;   私人int mLeftViewIndex=1;   私人int mRightViewIndex=0;   保护int mCurrentX;   保护int mNextX;   私人int mMaxX=Integer.MAX_VALUE;   私人int mDisplayOffset=0;   保护照片卷轴mScroller;   私人GestureDetector mGesture;   私人QueuemRemovedViewQueue=new LinkedList ();   私人OnItemSelectedListener mOnItemSelected;   私人OnItemClickListener mOnItemClicked;   私人OnItemLongClickListener mOnItemLongClicked;   私人布尔mDataChanged=false;         公共HorizontalListView(上下文语境,AttributeSet attrs) {   超级(上下文,attrs);   initView ();   }      私人同步空白initView () {   mLeftViewIndex=1;   mRightViewIndex=0;   mDisplayOffset=0;   mCurrentX=0;   mNextX=0;   mMaxX=Integer.MAX_VALUE;   mScroller=new照片卷轴(getContext ());   mGesture=new GestureDetector (getContext (), mOnGesture);   }      @Override   公共空间setOnItemSelectedListener (AdapterView。OnItemSelectedListener侦听器){   mOnItemSelected=侦听器;   }      @Override   公共空间setOnItemClickListener (AdapterView。OnItemClickListener侦听器){   mOnItemClicked=侦听器;   }      @Override   公共空间setOnItemLongClickListener (AdapterView。OnItemLongClickListener侦听器){   mOnItemLongClicked=侦听器;   }      私人DataSetObserver mDataObserver=new DataSetObserver () {      @Override   公共空间onchange () {   同步(HorizontalListView.this) {   mDataChanged=true;   }   无效();   requestLayout ();   }      @Override   公共空间onInvalidated () {   重置();   无效();   requestLayout ();   }      };      @Override   公共ListAdapter getAdapter () {   返回mAdapter;   }      @Override   公众视线getSelectedView () {//TODO:实现   返回null;   }      @Override   公共空间setAdapter (ListAdapter适配器){   如果(mAdapter !=null) {   mAdapter.unregisterDataSetObserver (mDataObserver);   }   mAdapter=适配器;   mAdapter.registerDataSetObserver (mDataObserver);   重置();   }      私人同步空白重置(){   initView ();   removeAllViewsInLayout ();   requestLayout ();   }      @Override   公共空间setSelection (int位置){//TODO:实现   }      私人空间addAndMeasureChild(最终视图的孩子,int viewPos) {   LayoutParams params=child.getLayoutParams ();   如果(params==null) {   params=new LayoutParams (LayoutParams。宽和LayoutParams.FILL_PARENT);   }      addViewInLayout(孩子,viewPos,参数,真实);   MeasureSpec.AT_MOST child.measure (MeasureSpec.makeMeasureSpec (getWidth ()),   MeasureSpec.AT_MOST MeasureSpec.makeMeasureSpec(获得()));   }            @Override   保护同步空白onLayout(布尔改变,int, int, int, int底部){   超级。onLayout(改变,左,上,右,下);      如果(mAdapter==null) {   返回;   }      如果(mDataChanged) {   int oldCurrentX=mCurrentX;   initView ();   removeAllViewsInLayout ();   mNextX=oldCurrentX;   mDataChanged=false;   }      如果(mScroller.computeScrollOffset ()) {   int scrollx=mScroller.getCurrX ();   mNextX=scrollx;   }      如果(mNextX & lt;=0) {   mNextX=0;   mScroller.forceFinished(真正的);   }   如果(mNextX祝辞=mMaxX) {   mNextX=mMaxX;   mScroller.forceFinished(真正的);   }      int dx=mCurrentX - mNextX;      removeNonVisibleItems (dx);   fillList (dx);   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的UI使用HorizontalListView实现水平滑动