ListView侧滑删除----->SlideView
来源:互联网 发布:守望max 数据不更新 编辑:程序博客网 时间:2024/05/18 02:03
时间过得真快,国庆小长假就结束了,好伤心呜呜—-已经开始了,我去,已经结束了?明天小伙伴们要继续上班了!该收收心好好工作了!有木有很激动!哈哈!相信大家对listview应该非常熟悉了,可以说耳闻能祥!我这里就不再赘述了,言贵正传!大家先看下效果
主要分为下面五种
-PrivateListingAdapter
-SlideListViewActivity
-SlideListView
-SlideView
-MessageBean
首先说下adapter跟普通适配器一样继承BaseAdapter然后实现OnClickListener监听事件,当用户想有侧滑时移除SlideListView中item中的某一项position,然后notifyDataSetChanged();通知listview刷新数据。
主要代码如下
holder.deleteViewHolder.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // T删除某一个item mList.remove(position); //刷新数据 notifyDataSetChanged(); } });SlideLsitViewActivity主要负责绑定SlideListView,然后通过更改Model实现数据的更新private void initView() { // 初始化操作 mSlideListView=(SlideListView) findViewById(R.id.slidelv); adapter=new PrivateListingAdapter(this); //创建一个list列表 ArrayList<MessageBean> mMessageList = new ArrayList<MessageBean>(); for (int i = 0; i < 20; i++) { //遍历item MessageBean bean=new MessageBean(); //判断当前取模为3是否等于零然后添加相应的信息 if(i % 3==0){ bean.iconRes=R.drawable.default_qq_avatar; bean.title="网易新闻"; bean.msg="创智播客创始人猝死"; bean.time="2016-10-06"; }else{ bean.iconRes=R.drawable.wechat_icon; bean.title="搜狐新闻"; bean.msg="杨洋地铁与粉丝骚扰"; bean.time="2016-10-04"; } //将Model添加到集合中 mMessageList.add(bean); }
下面进行适配器的绑定以及实现OnItemClickListener监听事件打印相应的position位置代码如下
adapter.setmMessageItems(mMessageList); mSlideListView.setAdapter(adapter); mSlideListView.setOnItemClickListener(this);
SlideListView继承ListView重写ListView中方法以及实现当手指向右滑动的监听记录当前手指记录的x,y轴坐标,然后判断当前是开始滑动,还是停止滑动,还是右滑等,实现代码如下
public boolean onTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub switch (ev.getAction()) { /**手指按下**/ case MotionEvent.ACTION_DOWN: int x=(int) ev.getX(); int y=(int) ev.getY(); int pos=pointToPosition(x, y); Log.i(TAG, "pos="+pos); if(pos!=INVALID_POSITION){ MessageBean msg=(MessageBean) getItemAtPosition(pos); mSlideView=msg.mSlideView; Log.i(TAG, "mSlideView="+mSlideView); break;
SlideView主要实现手指侧滑时的OnSlideListener事件,代码如下
public void onRequireTouchEvent(MotionEvent event){ int x=(int) event.getX(); int y=(int) event.getY(); int scrollX=getScrollX(); Log.d(TAG, "x="+x+"y="+y); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { if (!mScroller.isFinished()) { mScroller.abortAnimation(); } if (mOnSlideListener != null) { mOnSlideListener.onSlide(this, onSlideListener.SLIDE_STATUS_SCROLL); } break; } case MotionEvent.ACTION_MOVE: { int deltaX = x - mLastX; int deltaY = y - mLastY; if (Math.abs(deltaX) < Math.abs(deltaY) * TAN) { break; } int newScrollX = scrollX - deltaX; if (deltaX != 0) { if (newScrollX < 0) { newScrollX = 0; } else if (newScrollX >mHoldeWid) { newScrollX = mHoldeWid; } this.scrollTo(newScrollX, 0); } break; } case MotionEvent.ACTION_UP: { int newScrollX = 0; if (scrollX - mHoldeWid * 0.75 > 0) { newScrollX = mHoldeWid; } this.smoothScrollTo(newScrollX, 0); if (mOnSlideListener != null) { mOnSlideListener.onSlide(this, newScrollX == 0 ? onSlideListener.SLIDE_STATUS_OFF : onSlideListener.SLIDE_STATUS_ON); } break; } default: break; } mLastX = x; mLastY = y; }
MessageBean 里面主要包括一些图片资源,标题,信息,时间以及SlideView侧滑,代码如下。
public int iconRes; public String title; public String msg; public String time; public SlideView mSlideView;
基本功能就这些,主要通过手向右侧滑然后删除ListView中某一项的item中position,然后适配器Adapter通知ListView刷新。下面是全部代码!
package com.zm.ui;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import com.zm.adapter.PrivateListingAdapter;import com.zm.bean.MessageBean;import com.zm.view.SlideListView;import com.zm.view.SlideView;public class SlideListViewActivity extends Activity implements OnItemClickListener{ private SlideView mSlideView; private SlideListView mSlideListView; private PrivateListingAdapter adapter; private List<MessageBean> mList=new ArrayList<MessageBean>(); @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_privatelist); initView(); } private void initView() { // 初始化操作 mSlideListView=(SlideListView) findViewById(R.id.slidelv); adapter=new PrivateListingAdapter(this); ArrayList<MessageBean> mMessageList = new ArrayList<MessageBean>(); for (int i = 0; i < 20; i++) { MessageBean bean=new MessageBean(); if(i % 3==0){ bean.iconRes=R.drawable.default_qq_avatar; bean.title="网易新闻"; bean.msg="创智播客创始人猝死"; bean.time="2016-10-06"; }else{ bean.iconRes=R.drawable.wechat_icon; bean.title="搜狐新闻"; bean.msg="杨洋地铁与粉丝骚扰"; bean.time="2016-10-04"; } mMessageList.add(bean); } adapter.setmMessageItems(mMessageList); mSlideListView.setAdapter(adapter); mSlideListView.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub Log.i("tag", "position="+position); }}___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ package com.zm.adapter;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.zm.R;import com.zm.bean.MessageBean;import com.zm.view.SlideView;import com.zm.view.SlideView.onSlideListener;public class PrivateListingAdapter extends BaseAdapter implements onSlideListener{ private static final String TAG="PrivateListingAdapter"; private Context mContext; private List<MessageBean> mList =new ArrayList<MessageBean>(); private SlideView mSlideView; private LayoutInflater mLayoutInflater; public PrivateListingAdapter(Context context) { mContext = context; mLayoutInflater = LayoutInflater.from(mContext); //mLayoutInflater=(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public void setmMessageItems(List<MessageBean> mMessageItems) { this.mList = mMessageItems; }// public PrivateListingAdapter(Context mContext,List<MessageBean> mList){// this.mContext=mContext;// this.mList=mList;// /**获取系统布局服务**/// mLayoutInflater=LayoutInflater.from(mContext);// // } @Override public int getCount() { if(mList==null){ mList=new ArrayList<MessageBean>(); } return mList.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return mList.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder=null; SlideView mSlideView=(SlideView) convertView; if(mSlideView==null){ View item=mLayoutInflater.inflate(R.layout.privatelist_item, null); mSlideView=new SlideView(mContext); mSlideView.setContentView(item); holder=new ViewHolder(mSlideView); mSlideView.setOnSlideListener(this); mSlideView.setTag(holder); }else{ holder=(ViewHolder) mSlideView.getTag(); MessageBean mb=mList.get(position); mb.mSlideView=mSlideView; mb.mSlideView.shrink(); holder.iv_icon.setImageResource(mb.iconRes); holder.tv_title.setText(mb.title); holder.tv_msg.setText(mb.msg); holder.tv_time.setText(mb.time); holder.deleteViewHolder.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // T删除某一个item mList.remove(position); //刷新数据 notifyDataSetChanged(); } }); } return mSlideView; } @Override public void onSlide(View view, int status) { // TODO Auto-generated method stub if(mSlideView!=null&&mSlideView!=view){ mSlideView.shrink(); } if(status==SLIDE_STATUS_ON){ mSlideView=(SlideView) view; } } private static class ViewHolder{ public ImageView iv_icon; private TextView tv_title; public TextView tv_msg; public TextView tv_time; public ViewGroup deleteViewHolder; /** * 初始化 * @param v */ ViewHolder(View v){ iv_icon=(ImageView) v.findViewById(R.id.icon); tv_title=(TextView) v.findViewById(R.id.title); tv_msg=(TextView) v.findViewById(R.id.msg); tv_time=(TextView) v.findViewById(R.id.time); deleteViewHolder= (ViewGroup) v.findViewById(R.id.holder); } }}___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ package com.zm.bean;import com.zm.view.SlideView;public class MessageBean { public int iconRes; public String title; public String msg; public String time; public SlideView mSlideView; public int getIconRes() { return iconRes; } public void setIconRes(int iconRes) { this.iconRes = iconRes; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public SlideView getmSlideView() { return mSlideView; } public MessageBean(){ super(); } public MessageBean(int iconRes, String title, String msg, String time, SlideView mSlideView) { super(); this.iconRes = iconRes; this.title = title; this.msg = msg; this.time = time; this.mSlideView = mSlideView; } public void setmSlideView(SlideView mSlideView) { this.mSlideView = mSlideView; } @Override public String toString() { return "MessageBean [iconRes=" + iconRes + ", title=" + title + ", msg=" + msg + ", time=" + time + ", mSlideView=" + mSlideView + "]"; }}___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ package com.zm.view;import com.zm.R;import android.content.Context;import android.graphics.drawable.GradientDrawable.Orientation;import android.util.AttributeSet;import android.util.Log;import android.util.TypedValue;import android.view.MotionEvent;import android.view.View;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.Scroller;import android.widget.TextView;public class SlideView extends LinearLayout {// private TextView delete; private static final String TAG="SlideView"; /**上下文对象**/ private Context mContext; /**显示內容**/ private LinearLayout mViewContent; private RelativeLayout mViewHolder; /**滚动**/ private Scroller mScroller; private onSlideListener mOnSlideListener; private int mHoldeWid=120; private int mLastX=0; private int mLastY=0; private static final int TAN=2; /**回调监听**/ public interface onSlideListener{ /**停止滚动三种状态**/ public static final int SLIDE_STATUS_OFF=0; /**执行滚动**/ public static final int SLIDE_STATUS_SCROLL=1; /**开始滚动**/ public static final int SLIDE_STATUS_ON=2; public void onSlide(View view, int status); } public SlideView(Context context) { super(context); initView(); } public void shrink() { if (getScrollX() != 0) { this.smoothScrollTo(0, 0); } } private void smoothScrollTo(int destX, int destY) { // TODO Auto-generated method stub //缓慢滚动指定位置 int scrollX=getScrollX(); int delta=destX=destY; mScroller.startScroll(scrollX, 0, delta, 0, Math.abs(delta)*3); invalidate(); } private void initView() { //初始化操作 mContext=getContext(); /**初始化滚动实例**/ mScroller=new Scroller(mContext); /**设置为水平方向**/ setOrientation(LinearLayout.HORIZONTAL); View.inflate(mContext, R.layout.privatelisting_delete_merge, this); mViewContent=(LinearLayout) findViewById(R.id.view_content); mHoldeWid=Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mHoldeWid, getResources().getDisplayMetrics())); } public SlideView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub initView(); } public void setButtonText(CharSequence text) { ((TextView)findViewById(R.id.delete)).setText(text); } public void setContentView(View v){ mViewContent.addView(v); } @Override public void computeScroll() { if(mScroller.computeScrollOffset()){ scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); postInvalidate(); } super.computeScroll(); } public void setOnSlideListener(onSlideListener onSlideListener){ mOnSlideListener=onSlideListener; } public void onRequireTouchEvent(MotionEvent event){ int x=(int) event.getX(); int y=(int) event.getY(); int scrollX=getScrollX(); Log.d(TAG, "x="+x+"y="+y); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { if (!mScroller.isFinished()) { mScroller.abortAnimation(); } if (mOnSlideListener != null) { mOnSlideListener.onSlide(this, onSlideListener.SLIDE_STATUS_SCROLL); } break; } case MotionEvent.ACTION_MOVE: { int deltaX = x - mLastX; int deltaY = y - mLastY; if (Math.abs(deltaX) < Math.abs(deltaY) * TAN) { break; } int newScrollX = scrollX - deltaX; if (deltaX != 0) { if (newScrollX < 0) { newScrollX = 0; } else if (newScrollX >mHoldeWid) { newScrollX = mHoldeWid; } this.scrollTo(newScrollX, 0); } break; } case MotionEvent.ACTION_UP: { int newScrollX = 0; if (scrollX - mHoldeWid * 0.75 > 0) { newScrollX = mHoldeWid; } this.smoothScrollTo(newScrollX, 0); if (mOnSlideListener != null) { mOnSlideListener.onSlide(this, newScrollX == 0 ? onSlideListener.SLIDE_STATUS_OFF : onSlideListener.SLIDE_STATUS_ON); } break; } default: break; } mLastX = x; mLastY = y; } }___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ package com.zm.view;import com.zm.bean.MessageBean;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.ListView;public class SlideListView extends ListView { private static final String TAG="SlideListView"; private SlideView mSlideView; public SlideListView(Context context) { super(context); // TODO Auto-generated constructor stub } public SlideListView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public SlideListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // TODO Auto-generated constructor stub } public void shrinkListItem(int position){ View view=getChildAt(position); if(view!=null){ try { ((SlideView) view).shrink(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }@Overridepublic boolean onTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub switch (ev.getAction()) { /**手指按下**/ case MotionEvent.ACTION_DOWN: int x=(int) ev.getX(); int y=(int) ev.getY(); int pos=pointToPosition(x, y); Log.i(TAG, "pos="+pos); if(pos!=INVALID_POSITION){ MessageBean msg=(MessageBean) getItemAtPosition(pos); mSlideView=msg.mSlideView; Log.i(TAG, "mSlideView="+mSlideView); break; } default: break; } if(mSlideView!=null){ mSlideView.onRequireTouchEvent(ev); } return super.onTouchEvent(ev);}}
到这里步骤基本结束了!有兴趣的童鞋欢迎加入此群进行交流!
喜欢的加群!
转载请注明出处!http://blog.csdn.net/qq_15950325/article/details/52752904谢谢合作!
源码(http://download.csdn.net/detail/qq_15950325/9647117“)
- ListView侧滑删除----->SlideView
- 源码四:SlideView以及侧滑删除的使用
- 侧滑删除ListView
- ListView侧滑删除
- ListView侧滑删除
- listview侧滑删除
- ListView 侧滑删除
- ListView侧滑删除效果
- ListView之侧滑删除
- ListView侧滑删除(SwipeMenuListView)
- 侧滑删除的ListView
- ListView侧滑删除item
- 侧滑删除ListView:SwipeMenuListView
- 自定义ListView侧滑删除
- ListView 的侧滑删除
- Android 自定义ListView Item侧滑删除
- 安卓-ListView侧滑删除
- listview 侧滑删除 仿qq
- 关于我
- 报告老板:“这镜子已成精”
- css布局之流动布局(腾讯软件首页案例)
- cookie和session的理解
- workqueue的变化
- ListView侧滑删除----->SlideView
- request,response,session,cookie,application
- python核心编程学习笔记【2016-10-06】
- 栈溢出利用之DynELF实例
- [乱七八糟]bochs编译错误之'XSetForeground'
- 07-文本与进程的操作
- 栈溢出利用之return to dl-resolve实例
- python中List的sort方法(或者sorted内建函数)的用法
- Redis参考资源