我想这个效果大家都很熟悉吧。是不是在qq上看见过这个效果。俗话说好记性不如赖笔头,为了我的以后,为了跟我一样自学的小伙伴们,我把我的代码粘贴在下面。
activity_lookstaff.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" > <TextViewandroid:id="@+id/tv_title"style="@style/GTextView"android:text="全部员工" /><com.rjxy.view.DeleteListViewandroid:id="@+id/id_listview"android:layout_width="fill_parent"android:layout_height="wrap_content" android:layout_below="@+id/tv_title"></com.rjxy.view.DeleteListView></RelativeLayout>delete_btn.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical" > <Button android:id="@+id/id_item_btn"android:layout_width="60dp"android:singleLine="true"android:layout_height="wrap_content"android:text="删除" android:background="@drawable/d_delete_btn" android:textColor="#ffffff" android:paddingLeft="15dp" android:paddingRight="15dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="15dp"/></LinearLayout>d_delete_btn.xml
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/btn_style_five_focused" android:state_focused="true"></item><item android:drawable="@drawable/btn_style_five_pressed" android:state_pressed="true"></item><item android:drawable="@drawable/btn_style_five_normal"></item></selector>DeleteListView .java
package com.rjxy.view;import com.rjxy.activity.R;import android.content.Context;import android.util.AttributeSet;import android.view.Gravity;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewConfiguration;import android.widget.Button;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.PopupWindow;public class DeleteListView extends ListView{private static final String TAG = "DeleteListView";/** * 用户滑动的最小距离 */private int touchSlop;/** * 是否响应滑动 */private boolean isSliding;/** * 手指按下时的x坐标 */private int xDown;/** * 手指按下时的y坐标 */private int yDown;/** * 手指移动时的x坐标 */private int xMove;/** * 手指移动时的y坐标 */private int yMove;private LayoutInflater mInflater;private PopupWindow mPopupWindow;private int mPopupWindowHeight;private int mPopupWindowWidth;private Button mDelBtn;/** * 为删除按钮提供一个回调接口 */private DelButtonClickListener mListener;/** * 当前手指触摸的View */private View mCurrentView;/** * 当前手指触摸的位置 */private int mCurrentViewPos;/** * 必要的一些初始化 ** @param context * @param attrs */public DeleteListView(Context context, AttributeSet attrs){super(context, attrs);mInflater = LayoutInflater.from(context);touchSlop = ViewConfiguration.get(context).getScaledTouchSlop();View view = mInflater.inflate(R.layout.delete_btn, null);mDelBtn = (Button) view.findViewById(R.id.id_item_btn);mPopupWindow = new PopupWindow(view, LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);/** * 先调用下measure,否则拿不到宽和高 */mPopupWindow.getContentView().measure(0, 0);mPopupWindowHeight = mPopupWindow.getContentView().getMeasuredHeight();mPopupWindowWidth = mPopupWindow.getContentView().getMeasuredWidth();}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev){int action = ev.getAction();int x = (int) ev.getX();int y = (int) ev.getY();switch (action){case MotionEvent.ACTION_DOWN:xDown = x;yDown = y;/** * 如果当前popupWindow显示,则直接隐藏,然后屏蔽ListView的touch事件的下传 */if (mPopupWindow.isShowing()){dismissPopWindow();return false;}// 获得当前手指按下时的item的位置mCurrentViewPos = pointToPosition(xDown, yDown);// 获得当前手指按下时的itemView view = getChildAt(mCurrentViewPos - getFirstVisiblePosition());mCurrentView = view;break;case MotionEvent.ACTION_MOVE:xMove = x;yMove = y;int dx = xMove - xDown;int dy = yMove - yDown;/** * 判断是否是从右到左的滑动 */if (xMove < xDown && Math.abs(dx) > touchSlop && Math.abs(dy) < touchSlop){// Log.e(TAG, "touchslop = " + touchSlop + " , dx = " + dx +// " , dy = " + dy);isSliding = true;}break;}return super.dispatchTouchEvent(ev);}@Overridepublic boolean onTouchEvent(MotionEvent ev){int action = ev.getAction();/** * 如果是从右到左的滑动才相应 */if (isSliding){switch (action){case MotionEvent.ACTION_MOVE:int[] location = new int[2];// 获得当前item的位置x与ymCurrentView.getLocationOnScreen(location);// 设置popupWindow的动画mPopupWindow.setAnimationStyle(R.style.popwindow_delete_btn_anim_style);mPopupWindow.update();mPopupWindow.showAtLocation(mCurrentView, Gravity.LEFT | Gravity.TOP,location[0] + mCurrentView.getWidth(), location[1] + mCurrentView.getHeight() / 2- mPopupWindowHeight / 2);// 设置删除按钮的回调mDelBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){if (mListener != null){mListener.clickHappend(mCurrentViewPos);mPopupWindow.dismiss();}}});// Log.e(TAG, "mPopupWindow.getHeight()=" + mPopupWindowHeight);break;case MotionEvent.ACTION_UP:isSliding = false;}// 相应滑动期间屏幕itemClick事件,避免发生冲突return true;}return super.onTouchEvent(ev);}/** * 隐藏popupWindow */private void dismissPopWindow(){if (mPopupWindow != null && mPopupWindow.isShowing()){mPopupWindow.dismiss();}}public void setDelButtonClickListener(DelButtonClickListener listener){mListener = listener;}public interface DelButtonClickListener{public void clickHappend(int position);}}DeleteStaffActivity .java
package com.rjxy.activity;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.List;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import com.rjxy.bean.Staff;import com.rjxy.path.Path;import com.rjxy.util.StreamTools;import com.rjxy.view.DeleteListView;import com.rjxy.view.DeleteListView.DelButtonClickListener;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.Window;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.Toast;public class DeleteStaffActivity extends Activity {private static final int CHANGE_UI = 1;private static final int DELETE = 3;private static final int SUCCESS = 2;private static final int ERROR = 0;private DeleteListView lv;private ArrayAdapter<String> mAdapter;private List<String> staffs = new ArrayList<String>();private Staff staff;String sno;// 主线程创建消息处理器private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {if (msg.what == CHANGE_UI) {try {JSONArray arr = new JSONArray((String) msg.obj);for (int i = 0; i < arr.length(); i++) {JSONObject temp = (JSONObject) arr.get(i);staff = new Staff();staff.setSno(temp.getString("sno"));staff.setSname(temp.getString("sname"));staff.setDname(temp.getString("d_name"));staffs.add("员工号:" + staff.getSno() + " 姓名:"+ staff.getSname() + " 部门:" + staff.getDname());}mAdapter = new ArrayAdapter<String>(DeleteStaffActivity.this,android.R.layout.simple_list_item_1, staffs);lv.setAdapter(mAdapter);lv.setDelButtonClickListener(new DelButtonClickListener() {@Overridepublic void clickHappend(final int position) {String s = mAdapter.getItem(position);String[] ss = s.split(" ");String snos = ss[0];String[] sss = snos.split(":");sno = sss[1];delete();mAdapter.remove(mAdapter.getItem(position));}});lv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent,View view, int position, long id) {Toast.makeText(DeleteStaffActivity.this,position + " : "+ mAdapter.getItem(position), 0).show();}});} catch (JSONException e) {e.printStackTrace();}} else if (msg.what == DELETE) {Toast.makeText(DeleteStaffActivity.this, (String) msg.obj, 1).show();}};};@Overrideprotected void onCreate(Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);setContentView(R.layout.activity_lookstaff);lv = (DeleteListView) findViewById(R.id.id_listview);select();}private void select() {// 子线程更新UInew Thread() {public void run() {try {// 区别1、url的路径不同URL url = new URL(Path.lookStaffPath);HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 区别2、请求方式postconn.setRequestMethod("POST");conn.setRequestProperty("User-Agent","Mozilla/5.0(compatible;MSIE 9.0;Windows NT 6.1;Trident/5.0)");// 区别3、必须指定两个请求的参数conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");// 请求的类型 表单数据String data = "";conn.setRequestProperty("Content-Length", data.length()+ "");// 数据的长度// 区别4、记得设置把数据写给服务器conn.setDoOutput(true);// 设置向服务器写数据byte[] bytes = data.getBytes();conn.getOutputStream().write(bytes);// 把数据以流的方式写给服务器int code = conn.getResponseCode();System.out.println(code);if (code == 200) {InputStream is = conn.getInputStream();String result = StreamTools.readStream(is);Message mas = Message.obtain();mas.what = CHANGE_UI;mas.obj = result;handler.sendMessage(mas);} else {Message mas = Message.obtain();mas.what = ERROR;handler.sendMessage(mas);}} catch (IOException e) {// TODO Auto-generated catch blockMessage mas = Message.obtain();mas.what = ERROR;handler.sendMessage(mas);}}}.start();}private void delete() {// 子线程更新UInew Thread() {public void run() {try {// 区别1、url的路径不同URL url = new URL(Path.deleteStaffPath);HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 区别2、请求方式postconn.setRequestMethod("POST");conn.setRequestProperty("User-Agent","Mozilla/5.0(compatible;MSIE 9.0;Windows NT 6.1;Trident/5.0)");// 区别3、必须指定两个请求的参数conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");// 请求的类型 表单数据String data = "sno=" + sno;conn.setRequestProperty("Content-Length", data.length()+ "");// 数据的长度// 区别4、记得设置把数据写给服务器conn.setDoOutput(true);// 设置向服务器写数据byte[] bytes = data.getBytes();conn.getOutputStream().write(bytes);// 把数据以流的方式写给服务器int code = conn.getResponseCode();System.out.println(code);if (code == 200) {InputStream is = conn.getInputStream();String result = StreamTools.readStream(is);Message mas = Message.obtain();mas.what = DELETE;mas.obj = result;handler.sendMessage(mas);} else {Message mas = Message.obtain();mas.what = ERROR;handler.sendMessage(mas);}} catch (IOException e) {// TODO Auto-generated catch blockMessage mas = Message.obtain();mas.what = ERROR;handler.sendMessage(mas);}}}.start();}}以上所述是小编给大家介绍的Android滑动删除数据功能的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!