MainActivity is as follows:
Package cc. testviewstudy4; import java. util. arrayList; import java. util. hashMap; import cc. testviewstudy4.ListViewSubClass. onDeleteListener; import android. OS. bundle; import android. widget. simpleAdapter; import android. app. activity;/*** Demo Description: * learning about custom View (4) ** there are three methods to implement custom View: * Custom Control, composite control, and inheritance control * In this Demo, the inherited control is implemented: * Custom ListView. A * Delete View can appear when sliding on the Item of the ListView. click it to delete the data in the ListView ** learning materials: * http://blog.csdn.net/guolin_blog/article/details/17357967 * Thank you very much **/public class MainActivity extends Activity {private ListViewSubClass mListView; private SimpleAdapter mSimpleAdapter; private ArrayList
> MArrayList; @ Overrideprotected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. main); init ();} private void init () {mListView = (ListViewSubClass) findViewById (R. id. listView); mArrayList = new ArrayList
> (); HashMap
HashMap = null; for (int I = 0; I <12; I ++) {hashMap = new HashMap
(); HashMap. put ("name", "James" + I); mArrayList. add (hashMap);} mSimpleAdapter = new SimpleAdapter (this, mArrayList, R. layout. listviewitem, new String [] {"name"}, new int [] {R. id. name}); mListView. setAdapter (mSimpleAdapter); mListView. setOnDeleteListener (new OnDeleteListener () {@ Overridepublic void onDelete (int index) {mArrayList. remove (index); mSimpleAdapter. notifyDataSetChanged ();}});}}
ListViewSubClass:
Package cc. testviewstudy4; import android. content. context; import android. util. attributeSet; 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. onTouchListener; import android. view. viewGroup; import android. widget. listView; import android. widget. relat IveLayout; public class ListViewSubClass extends ListView implements attributes, OnTouchListener {private listener; private OnDeleteListener mDeleteListener; private View mDeleteView; private ViewGroup attributes; private int selectedItem; private boolean isDeleteShowing; public ListViewSubClass (Context context) {super (context);} public ListViewSubClass (Context co Ntext, AttributeSet attrs) {super (context, attrs); // listen to TouchsetOnTouchListener (this); // gesture mGestureDetector = new GestureDetector (context, this );} public ListViewSubClass (Context context, AttributeSet attrs, int defStyle) {super (context, attrs, defStyle);} public void listener (OnDeleteListener onDeleteListener) {mDeleteListener = onDeleteListener ;} // define an interface public interface OnDeleteListener {vo Id onDelete (int index);} // ------> implementation of the OnTouchListener interface @ Overridepublic boolean onTouch (View v, MotionEvent event) {// if --> when a View is deleted. if (isDeleteShowing) {mListViewItemViewGroup. removeView (mDeleteView); mDeleteView = null; isDeleteShowing = false; return false; // else --> assign it to GestureDetector for processing in other cases} else {return mGestureDetector. onTouchEvent (event) ;}}// ------> the following method is the implementation of the OnTouchListener interface. Now // ------> the following method is the implementation of the OnGestureListener interface @ Overridepublic boolean onDown (MotionEvent e) {if (! IsDeleteShowing) {selectedItem = pointToPosition (int) e. getX (), (int) e. getY ();} return false;} @ Overridepublic boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {// Delete Viewif (! IsDeleteShowing & Math. abs (velocityX)> Math. abs (velocityY) {mDeleteView = LayoutInflater. from (getContext ()). inflate (R. layout. delete, null); mDeleteView. setOnClickListener (new OnClickListener () {@ Overridepublic void onClick (View v) {mListViewItemViewGroup. removeView (mDeleteView); mDeleteView = null; isDeleteShowing = false; mDeleteListener. onDelete (selectedItem) ;}}); // find the current ItemmListViewItemViewGroup = (ViewGroup) getChildAt (selectedItem-getFirstVisiblePosition (); RelativeLayout. layoutParams params = new RelativeLayout. layoutParams (LayoutParams. WRAP_CONTENT, LayoutParams. WRAP_CONTENT); params. addRule (RelativeLayout. ALIGN_PARENT_RIGHT); params. addRule (RelativeLayout. CENTER_VERTICAL); mListViewItemViewGroup. addView (mDeleteView, params); isDeleteShowing = true;} return false;} @ Overridepublic void onLongPress (MotionEvent e) {}@ Overridepublic boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {return false ;}@ Overridepublic void onShowPress (MotionEvent e) {}@ Overridepublic boolean onSingleTapUp (MotionEvent e) {return false ;} // ------> the above method is the implementation of the OnGestureListener interface}
Main. xml is as follows:
Delete. xml is as follows:
Listviewitem is as follows:
Zookeeper