Custom slide to delete the ListView of an item ., Itemlistview
First, inherit the class that inherits ListView and implements OnTouchListener and OnGestureListener.
The pointToPosition (int x, int y) method in AbsList is used to obtain the index of the row to be clicked in the list based on the position to be clicked.
The getChildAt (int index) method in ViewGroup is used to obtain the child control based on the current index. This (this index starts at the top of the visible screen ).
OnTouchListener and OnGestureListener are implemented. This is because OnGestureListener wants to obtain the event passed by OnTouchListener.
Package com. example. mylistview; import android. content. context; import android. util. attributeSet; import android. widget. listView; import android. widget. relativeLayout; import android. widget. toast; import android. view. gestureDetector; import android. view. gestureDetector. onGestureListener; import android. view. layoutInflater; import android. view. motionEvent; import android. view. view; import android. view. view. onT OuchListener; import android. view. viewGroup; public class MyListView extends ListView implements OnTouchListener, listener {private listener; private View deleteButton; private ViewGroup itemLayout; private onDeleteListener listener; private int selectedItem; private boolean isDeleteShown; private Context lcontext; public void setonDeleteListener (onDeleteListener l) {listener = L ;}// callback interface public interface onDeleteListener {void onDelete (int index);} public MyListView (Context context, AttributeSet attrs) {super (context, attrs ); gestureDetector = new GestureDetector (getContext (), this); lcontext = context; setOnTouchListener (this);} // event input port, distribute the event to gestureDetector. @ Overridepublic boolean onTouch (View v, MotionEvent event) {if (isDeleteShown) {itemLayout. removeView (deleteButton); deleteButton = null; isDeleteShown = false; return false;} return gestureDetector. onTouchEvent (event) ;}@ Overridepublic boolean onDown (MotionEvent e) {if (! IsDeleteShown) {// The number of rows at the specified position selectedItem = pointToPosition (int) e. getX (), (int) e. getY ();} return true;} // process a sliding event @ Overridepublic boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {// if the button is not displayed and the speed on the X axis is greater than the speed on the Y axis if (! IsDeleteShown & Math. abs (velocityX)> Math. abs (velocityY) {deleteButton = LayoutInflater. from (getContext ()). inflate (R. layout. delete_button, null); deleteButton. setOnClickListener (new OnClickListener () {@ Overridepublic void onClick (View v) {itemLayout. removeView (deleteButton); deleteButton = null; isDeleteShown = false; listener. onDelete (selectedItem) ;}}); // (starting from the current page) obtain the layout itemLayout = (ViewGroup) g of a row EtChildAt (selectedItem-getFirstVisiblePosition (); if (itemLayout = null) {Toast. makeText (lcontext, "select an available row! ", Toast. LENGTH_SHORT ). show (); return false;} // set the Add parameter RelativeLayout of the button. layoutParams params = new RelativeLayout. layoutParams (LayoutParams. WRAP_CONTENT, LayoutParams. WRAP_CONTENT); params. addRule (RelativeLayout. ALIGN_PARENT_RIGHT); params. addRule (RelativeLayout. CENTER_VERTICAL); itemLayout. addView (deleteButton, params); isDeleteShown = true;} return true ;}@ Overridepublic void onShowPress (MotionEvent e) {// TODO Auto-generated method stub} @ Overridepublic boolean onSingleTapUp (MotionEvent e) {// TODO Auto-generated method stubreturn false;} @ Overridepublic boolean onScroll (MotionEvent e1, motionEvent e2, float distanceX, float distanceY) {// TODO Auto-generated method stubreturn false;} @ Overridepublic void onLongPress (MotionEvent e) {// TODO Auto-generated method stub }}Then define the deletion button layout, the main interface layout, and the item layout.
Custom adapter:
package com.example.mylistview;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.TextView;public class MyAdapter extends ArrayAdapter<String> {public MyAdapter(Context context, int resource, List<String> objects) {super(context, resource, objects);// TODO Auto-generated constructor stub}@Overridepublic View getView(int position,View convertView,ViewGroup parent){View view;if(convertView == null){view = LayoutInflater.from(getContext()).inflate(R.layout.list_view_item, null);}else{view = convertView;}TextView tv = (TextView)view.findViewById(R.id.text_view);tv.setText(getItem(position));return view;}}Main Interface code:
</Pre> <pre name = "code" class = "java"> package com. example. mylistview; import java. util. arrayList; import java. util. list; import com. example. mylistview. myListView. onDeleteListener; import android. OS. bundle; import android. view. menu; import android. view. menuItem; import android. view. window; import android. app. activity; public class MainActivity extends Activity {MyListView myList; MyAdapter adapter; private List <String> list = new ArrayList <String> (); @ Overrideprotected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); requestWindowFeature (Window. FEATURE_NO_TITLE); setContentView (R. layout. activity_main); initList (); myList = (MyListView) findViewById (R. id. myList); // input the interface and implement the corresponding method myList. setonDeleteListener (new onDeleteListener () {@ Override // Delete the public void onDelete (int index) {list. remove (index); adapter. notifyDataSetChanged () ;}}); adapter = new MyAdapter (this, 0, list); myList. setAdapter (adapter);} private void initList () {list. clear (); list. add ("item 1"); list. add ("item 2"); list. add ("item 3"); list. add ("item 4"); list. add ("item 5"); list. add ("item 6"); list. add ("item 7"); list. add ("item 8"); list. add ("item 9"); list. add ("item 10"); list. add ("item 11"); list. add ("item 12"); list. add ("item 13"); list. add ("item 14"); list. add ("item 15") ;}@ Overridepublic boolean onCreateOptionsMenu (Menu menu) {getMenuInflater (). inflate (R. menu. main, menu); return true ;}@ Overridepublic boolean onOptionsItemSelected (MenuItem item) {if (item. getItemId () = R. id. reLoad) {initList (); adapter. notifyDataSetChanged () ;}return true ;}}
Android ListView Item sliding deletion Effect
GOOGLE SwipeListView
Android ListView sliding Deletion
You can refer to the code of the last task interface in android4.0 source code. The specific location is under frameworks \ base \ packages \ SystemUI.