android 自定义可以侧滑操作的listview
来源:互联网 发布:linux c daemon 编辑:程序博客网 时间:2024/06/05 19:09
第一 自定义SlideListView2 继承 Listview
最关键的是onTouchEvent 的处理
public class SlideListView2 extends ListView {
private int mScreenWidth; // 屏幕宽度
private int mDownX; // 按下点的x值
private int mDownY; // 按下点的y值
private int mDeleteBtnWidth;// 删除按钮的宽度
private boolean isDeleteShown; // 删除按钮是否正在显示private ViewGroup mPointChild; // 当前处理的itemprivate LinearLayout.LayoutParams mLayoutParams; // 当前处理的item的LayoutParamspublic SlideListView2(Context context, AttributeSet attrs) { this(context, attrs, 0);}public SlideListView2(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // 获取屏幕宽度 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); mScreenWidth = dm.widthPixels;}@Overridepublic boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: performActionDown(ev); break; case MotionEvent.ACTION_MOVE: return performActionMove(ev); case MotionEvent.ACTION_UP: performActionUp(); break; } return super.onTouchEvent(ev);}// 处理action_down事件private void performActionDown(MotionEvent ev) { if(isDeleteShown) { turnToNormal(); }else { mDownX = (int) ev.getX(); mDownY = (int) ev.getY(); // 获取当前点的item mPointChild = (ViewGroup) getChildAt(pointToPosition(mDownX, mDownY) - getFirstVisiblePosition()); // 获取删除按钮的宽度 mDeleteBtnWidth = mPointChild.getChildAt(1).getLayoutParams().width; mLayoutParams = (LinearLayout.LayoutParams) mPointChild.getChildAt(0) .getLayoutParams(); mLayoutParams.width = mScreenWidth; mPointChild.getChildAt(0).setLayoutParams(mLayoutParams); }}// 处理action_move事件private boolean performActionMove(MotionEvent ev) { int nowX = (int) ev.getX(); int nowY = (int) ev.getY(); if(Math.abs(nowX - mDownX) > Math.abs(nowY - mDownY)) { // 如果向左滑动 if(nowX < mDownX) { // 计算要偏移的距离 int scroll = (nowX - mDownX) / 3; // 如果大于了删除按钮的宽度, 则最大为删除按钮的宽度 if(-scroll >= mDeleteBtnWidth) { scroll = -mDeleteBtnWidth; } // 重新设置leftMargin mLayoutParams.leftMargin = scroll*3; mPointChild.getChildAt(0).setLayoutParams(mLayoutParams); } return true; } return super.onTouchEvent(ev);}// 处理action_up事件private void performActionUp() { // 偏移量大于button的一半,则显示button // 否则恢复默认 if(-mLayoutParams.leftMargin >= mDeleteBtnWidth / 3) { mLayoutParams.leftMargin = -mDeleteBtnWidth*3; isDeleteShown = true; }else { turnToNormal(); } mPointChild.getChildAt(0).setLayoutParams(mLayoutParams);}/** * 变为正常状态 */public void turnToNormal() { mLayoutParams.leftMargin = 0; mPointChild.getChildAt(0).setLayoutParams(mLayoutParams); isDeleteShown = false;}/** * 当前是否可点击 * @return 是否可点击 * */public boolean canClick() { return !isDeleteShown;}![这里写图片描述](http://img.blog.csdn.net/20170714140709420?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTmFpZGVfUw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
}
这是自定义得侧滑效果
接下来 按照惯例 给listview 设置adapter 和 点击时间即可
* 第二 在adapter中 自定义一个点击接口和点击响应方法 并给按钮添加点击事件*
SlideListview 的 Adapter
public class SellServiceListAdapter extends BaseAdapter {
Context context;
List<> list;
OnClickListenerEditOrDelete onClickListenerEditOrDelete;
public SellServiceListAdapter(Context context, List<> list) {
this.context=context;
this.list=list;
}
@Overridepublic int getCount() { return list.size();}@Overridepublic Object getItem(int position) { return list.get(position);}@Overridepublic long getItemId(int position) { return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) { View view; ViewHolder holder; if (convertView==null){ view = View.inflate(context, R.layout.sellservicelist_item,null); holder = new ViewHolder(); holder.selldelete = (TextView) view.findViewById(R.id.adsellservice_delete); holder.selledit = (TextView) view.findViewById(R.id.adsellservice_edit); holder.sellview = (TextView) view.findViewById(R.id.adsellservice_setview); view.setTag(holder); }else { view = convertView; holder = (ViewHolder) view.getTag(); } 设置点击 holder.sellview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onClickListenerEditOrDelete!=null){ onClickListenerEditOrDelete.OnClickListenersetView(position); } } }); holder.selldelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onClickListenerEditOrDelete!=null){ onClickListenerEditOrDelete.OnClickListenerDelete(position); } } }); holder.selledit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onClickListenerEditOrDelete!=null){ onClickListenerEditOrDelete.OnClickListenerEdit(position); } } }); return view;}class ViewHolder{ TextView selldelete,selledit,sellview;}点击接口和响应方法public interface OnClickListenerEditOrDelete{ void OnClickListenerEdit(int position); void OnClickListenerDelete(int position); void OnClickListenersetView(int position);}
设置点击的方法
public void setOnClickListenerEditOrDelete(OnClickListenerEditOrDelete onClickListenerEditOrDelete1){
this.onClickListenerEditOrDelete=onClickListenerEditOrDelete1;
}
}
* 第三 在activity中初始化SlideListview 并添加点击方法*
SellServiceListAdapter adapter = new SellServiceListAdapter(getActivity(),list);
selllist.setAdapter(adapter);
adapter.setOnClickListenerEditOrDelete(new SellServiceListAdapter.OnClickListenerEditOrDelete() {
@Override
public void OnClickListenerEdit(int position) {
Toast.makeText(getActivity(), “编辑”, Toast.LENGTH_SHORT).show();
}
@Override public void OnClickListenerDelete(int position) { Toast.makeText(getActivity(), "删除", Toast.LENGTH_SHORT).show(); } @Override public void OnClickListenersetView(int position) { Toast.makeText(getActivity(), "展示", Toast.LENGTH_SHORT).show(); } });
也可以设置成为item 和 button 可同时点击 自己挖掘吧
- android 自定义可以侧滑操作的listview
- android自定义控件--条目可以左右滑动的listview
- 自定义Android的ListView
- 自定义可以设置最大高度的ListView
- 侧滑可以删除的ListView
- Android中自定义可以下拉刷新的ListView(附demo)
- Android 自定义ListView Item侧滑删除
- Android开发之自定义侧滑ListView
- Android中ListView的分页--自定义ListView
- Android 自定义Adapter的Listview
- Android 自定义Adapter的ListView
- android 自定义弹性的ListView
- Android 自定义Adapter的ListView
- Android自定义adapter的listview
- android ExpandableListView可以展开的ListView
- Android---可以实现下拉刷新的ListView
- Android仿QQ和iOS的ListView左滑出现删除和置顶等操作,可自定义菜单
- 自定义 头部可以缩放listview
- PythonNewHere-模块导入
- msql优化--索引优化
- Android dm-verity 实现原理深入研究
- SpringCloud系列(3)---Netfilx-Ribbon
- android studio开发莫名遇到非法字符/ufeff
- android 自定义可以侧滑操作的listview
- 符号表以及在有序数组中的二分查找
- 用户回调期间遇到未经处理的异常
- JavaScript返回上一页
- HTML 表格标签简单示例
- Java中常用的10种设计模式详解
- Linux Page Cache的工作原理
- 你假笨JVM参数
- linux防火墙的开启与关闭