关于listview的左右滑动实现,在网上其实已经有很多示例代码了,多数都是将listview嵌套在horiscrollview或是viewpager里,而这两种实现方式都是基于一个父容器里有多个子控件横向排列,在移动过程中通过手势最终实现视图的切换。但有些应用是不需要多个子控件对象,换言之出于节省内存的考究,比如十个item页,每页视图其实都是一个listview,而如果放上10个listview实属浪费。所以将一个listview放置在自定义的容器内,那么在处理手势的时候在判定可左右移动时做个动画,待动画结束后将另一个item页的数据显示出来即可。
下面先上SlideViewGroup的代码:
public class SlideViewGroup extends RelativeLayout implements AnimationListener{
public static interface onItemChangeListener{
public void onItemChange(int curItem);
}
private final static int OFFSET_X_DISTANCE = 50;
private float mLastMotionX = 0;
private boolean mIsHookTouchEvent = false;
private boolean mAnimationStart = false;
private boolean mMoveFinish = true;
private boolean mMoveLeft = true;
private int mItemCount = 1;
private int mCurItemIndex = 0;
private onItemChangeListener mItemChangeListener;
private TranslateAnimation mMoveLeftAnimation;
private TranslateAnimation mMoveRightAnimation;
private int mScreenWidth = 0;
public SlideViewGroup(Context context) {
super(context);
init(context);
}
public SlideViewGroup(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public void setOnItemChangeListener(onItemChangeListener listener){
mItemChangeListener = listener;
}
public void setItemCount(int itemCount){
mItemCount = itemCount;
}
public int getItemCount(){
return mItemCount;
}
public void setCurItem(int index){
if (index < 0){
index = 0;
}else if (index >= mItemC