最近还没找到工作所以在宿舍有点闲,所以呢就自己写了这么一个例子。之前网上有很多人写过类似的文章或demo,github上面也有开源项目。但是,老是copy别人代码也怪没意思的,于是就自己尝试着自己写呗。废话多了先来看下效果咯:
运行效果:
1、实现思路
其实实现思路很简单那就是在ListView的item里面放一个可以滑动的view,这里我用的是HorizontalScrollView。我之所以选HorizontalScrollView是因为可以不用去处理move事件
2、SildingView的实现
SildingView是我自定义的一个View 他继承的是HorizontalScrollView,SildingView就是我们要放到ListView item里面的View。代码如下所示:
SlideView.java
package okhttp.lc.com.lateralslidingitem;
import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.Scroller;
/**
* Created by HP on 2016/6/6.
*/
public class SildingView extends HorizontalScrollView {
int mScreenWidth;
boolean once = false;
//将MenuItem的宽度设置为100px
int MenuWidth = 100;
LinearLayout wapperView;
LinearLayout mContent;
LinearLayout mMenu;
OpenStatusListener mListener;
//判断菜单是否打开
boolean isOpen = false;
public SildingView(Context context) {
this(context, null);
}
public SildingView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SildingView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
public void setContent(View view) {
addView(view);
}
private void init(Context context) {
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(outMetrics);
mScreenWidth = outMetrics.widthPixels;
}
/**
* 设置ItemMenu打开监听事件
* @param mListener
*/
public void setOpenStatusListener(OpenStatusListener mListener) {
this.mListener = mListener;
}
public interface OpenStatusListener {
//status 0表示打开 1表示关闭
void getOpenStatus(int status);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_UP: {
if (getScrollX() >= MenuWidth / 2) {
smoothScrollTo(MenuWidth, 0);
isOpen = true;
mListener.getOpenStatus(0);
} else {
smoothScrollTo(0, 0