Android自定义View之ListView条目滑动删除(仿QQ5.1)

最近一直在找工作,找不到工作让我很捉急。如果大家有什么好工作的可以介绍给我,在此就感谢大家了。

 

今天給大家带来的是仿QQ5.1条目的滑动删除效果,还是先看看效果吧!

 

其实呢!完成这样的效果很简单,这里我们使用github里的一个开源项目(SwipeMenuListView-master)就可以完成这样的效果了。文章末尾给出该开源项目的下载地址。

 

让我们一起动手来看看是怎么实现这样的效果的吧!首先我们将下载的开源项目(SwipeMenuListView-master)解压并import进Eclipse中。具体步骤为:点击File-->Import-->如下图:

点击next-->如下图:

最后点击Finish完成。

 

OK!开源项目导入完成,接下来我们就新建名为MySwipeMenu的Android项目:

然后我们就要导入那个开源项目的库了,具体做法如下:右键MySwipeMenu-->点击Properties-->点击Android-->点击Add-->选择刚刚导入的那个库-->一直OK!

 

 

好了,一切准备就绪就开始编写代码了。

activity_main.xml:

 

[html] view plain copy
 
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     tools:context="com.example.myswipemenu.MainActivity" >  
  6.     <com.baoyz.swipemenulistview.SwipeMenuListView  
  7.         android:id="@+id/listView"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="match_parent" />  
  10.       
  11. </RelativeLayout>  

 

 

items_layout.xml:

 

[html] view plain copy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="horizontal" >  
  6.     <ImageView   
  7.         android:id="@+id/imageview"  
  8.         android:layout_width="60dip"  
  9.         android:layout_height="60dip"  
  10.         android:scaleType="fitCenter"  
  11.         />  
  12.     <TextView   
  13.         android:id="@+id/textview"  
  14.         android:layout_width="match_parent"  
  15.         android:layout_marginLeft="10dip"  
  16.         android:layout_height="60dip"  
  17.         android:layout_weight="1"  
  18.         android:gravity="center_vertical"  
  19.         android:textSize="34sp"  
  20.         />  
  21.   
  22. </LinearLayout>  



MainActivity.java:

 

 

[java] view plain copy
 
  1. package com.example.myswipemenu;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import com.baoyz.swipemenulistview.SwipeMenu;  
  9. import com.baoyz.swipemenulistview.SwipeMenuCreator;  
  10. import com.baoyz.swipemenulistview.SwipeMenuItem;  
  11. import com.baoyz.swipemenulistview.SwipeMenuListView;  
  12. import com.baoyz.swipemenulistview.SwipeMenuListView.OnMenuItemClickListener;  
  13.   
  14. import android.support.v7.app.ActionBarActivity;  
  15. import android.graphics.Color;  
  16. import android.graphics.drawable.ColorDrawable;  
  17. import android.os.Bundle;  
  18. import android.util.TypedValue;  
  19. import android.view.Menu;  
  20. import android.view.MenuItem;  
  21. import android.view.View;  
  22. import android.widget.AdapterView;  
  23. import android.widget.AdapterView.OnItemClickListener;  
  24. import android.widget.SimpleAdapter;  
  25. import android.widget.Toast;  
  26.   
  27. /** 
  28.  * 仿QQ5.1条目滑动删除效果 
  29.  *  
  30.  * @author Joker_Ya 
  31.  *  
  32.  */  
  33. public class MainActivity extends ActionBarActivity {  
  34.     // 获得图片资源列表  
  35.     private int[] images = new int[] { R.drawable.girl1, R.drawable.girl2,  
  36.             R.drawable.girl3, R.drawable.girl4, R.drawable.girl5,  
  37.             R.drawable.girl6, R.drawable.girl7, };  
  38.     private List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
  39.     private Map<String, Object> map;  
  40.     private SwipeMenuListView mSwipeMenuListView;  
  41.     private SimpleAdapter adapter;  
  42.   
  43.     @Override  
  44.     protected void onCreate(Bundle savedInstanceState) {  
  45.         super.onCreate(savedInstanceState);  
  46.         setContentView(R.layout.activity_main);  
  47.   
  48.         mSwipeMenuListView = (SwipeMenuListView) findViewById(R.id.listView);  
  49.         adapter = new SimpleAdapter(this, getData(), R.layout.items_layout,  
  50.                 new String[] { "img", "name" }, new int[] { R.id.imageview,  
  51.                         R.id.textview });  
  52.         mSwipeMenuListView.setAdapter(adapter);  
  53.         // step 1. create a MenuCreator  
  54.         SwipeMenuCreator creator = new SwipeMenuCreator() {  
  55.   
  56.             @Override  
  57.             public void create(SwipeMenu menu) {  
  58.                 // TODO Auto-generated method stub  
  59.                 // create "open" item  
  60.                 SwipeMenuItem openItem = new SwipeMenuItem(  
  61.                         getApplicationContext());  
  62.                 // set item background  
  63.                 openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,  
  64.                         0xCE)));  
  65.                 // set item width  
  66.                 openItem.setWidth(dp2px(90));  
  67.                 // set item title  
  68.                 openItem.setTitle("Open");  
  69.                 // set item title fontsize  
  70.                 openItem.setTitleSize(18);  
  71.                 // set item title font color  
  72.                 openItem.setTitleColor(Color.WHITE);  
  73.                 // add to menu  
  74.                 menu.addMenuItem(openItem);  
  75.   
  76.                 // create "delete" item  
  77.                 SwipeMenuItem deleteItem = new SwipeMenuItem(  
  78.                         getApplicationContext());  
  79.                 // set item background  
  80.                 deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,  
  81.                         0x3F, 0x25)));  
  82.                 // set item width  
  83.                 deleteItem.setWidth(dp2px(90));  
  84.                 // set a icon  
  85.                 deleteItem.setIcon(R.drawable.ic_delete);  
  86.                 // add to menu  
  87.                 menu.addMenuItem(deleteItem);  
  88.             }  
  89.         };  
  90.         // set creator  
  91.         mSwipeMenuListView.setMenuCreator(creator);  
  92.         // step 2. listener menutime click event  
  93.         mSwipeMenuListView  
  94.                 .setOnMenuItemClickListener(new OnMenuItemClickListener() {  
  95.   
  96.                     @Override  
  97.                     public void onMenuItemClick(int position, SwipeMenu menu,  
  98.                             int index) {  
  99.                         // TODO Auto-generated method stub  
  100.                         switch (index) {  
  101.                         case 0:  
  102.                             // click "OPEN"  
  103.                             Toast.makeText(MainActivity.this,  
  104.                                     "You click \"OPEN\"", 3000).show();  
  105.                             break;  
  106.                         case 1:  
  107.                             // click "DELETE"  
  108.                             list.remove(position);  
  109.                             adapter.notifyDataSetChanged();  
  110.                             break;  
  111.   
  112.                         default:  
  113.                             break;  
  114.                         }  
  115.                     }  
  116.                 });  
  117.         // listview item click event  
  118.         mSwipeMenuListView.setOnItemClickListener(new OnItemClickListener() {  
  119.   
  120.             @Override  
  121.             public void onItemClick(AdapterView<?> arg0, View arg1,  
  122.                     int position, long arg3) {  
  123.                 // TODO Auto-generated method stub  
  124.                 Toast.makeText(MainActivity.this, "You click Girl" + position,  
  125.                         3000).show();  
  126.             }  
  127.         });  
  128.     }  
  129.   
  130.     // 模拟获得数据  
  131.     private List<Map<String, Object>> getData() {  
  132.         // TODO Auto-generated method stub  
  133.         for (int i = 0; i < images.length; i++) {  
  134.             map = new HashMap<String, Object>();  
  135.             map.put("img", images[i]);  
  136.             map.put("name", "girl" + i);  
  137.             list.add(map);  
  138.         }  
  139.         return list;  
  140.     }  
  141.   
  142.     // dp转换为px  
  143.     private int dp2px(int dp) {  
  144.         return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,  
  145.                 getResources().getDisplayMetrics());  
  146.     }  
  147.   
  148.     @Override  
  149.     public boolean onCreateOptionsMenu(Menu menu) {  
  150.         // Inflate the menu; this adds items to the action bar if it is present.  
  151.         getMenuInflater().inflate(R.menu.main, menu);  
  152.         return true;  
  153.     }  
  154.   
  155.     @Override  
  156.     public boolean onOptionsItemSelected(MenuItem item) {  
  157.         // Handle action bar item clicks here. The action bar will  
  158.         // automatically handle clicks on the Home/Up button, so long  
  159.         // as you specify a parent activity in AndroidManifest.xml.  
  160.         int id = item.getItemId();  
  161.         if (id == R.id.action_settings) {  
  162.             return true;  
  163.         }  
  164.         return super.onOptionsItemSelected(item);  
  165.     }  
  166.   
  167. }  


比较简单就不多说了。注释也比较清楚,而且那个开源项目有demo也有注释,大家不妨下来看看。

 

 

最后附上SwipeMenuListView-master下载地址:

SwipeMenuListView-master

源码下载

posted @ 2017-03-12 19:13  天涯海角路  阅读(130)  评论(0)    收藏  举报