本次demo是借鉴的:http://www.cnblogs.com/exmyth/p/4606187.html
本例子实现了滑动删除ListView的Itemdemo的效果、大家都知道、这种创意是来源于IOS的、左滑删除的功能、在Android上面实现比较 麻烦、本例子中不仅实现了左滑删除功能、还实现了左滑赞、左滑分享、左滑收藏等功能、当然大家也可以根据自己项目的需求来修改功能、QQ和微信也实现了相同的功能、大家可以看看。
大神已经把需要的自定义控件都封装成类,我只是做了一下简单的了解,以及使用,时间有限,并没有仔细研究.
工程目录如下leftDelete、diffeentLeftDelete是实现左滑效果的类 ,,swipemenulistview是大神封装好的类,没有太详细的说明,看着有点累,源码已经贴在本文后面了
1.新建leftDelete类,(左滑的功能是封装好了的哈、上面贴出来的只是调用方法、更多使用方法、大家可以下载源代码慢慢研究)
1 package com.example.android_listview; 2 3 import java.util.List; 4 5 import swipemenulistview.SwipeMenu; 6 import swipemenulistview.SwipeMenuCreator; 7 import swipemenulistview.SwipeMenuItem; 8 import swipemenulistview.SwipeMenuListView; 9 import swipemenulistview.SwipeMenuListView.OnMenuItemClickListener; 10 import swipemenulistview.SwipeMenuListView.OnSwipeListener; 11 12 import android.app.Activity; 13 import android.content.ComponentName; 14 import android.content.Intent; 15 import android.content.pm.ApplicationInfo; 16 import android.content.pm.ResolveInfo; 17 import android.graphics.Color; 18 import android.graphics.drawable.ColorDrawable; 19 import android.net.Uri; 20 import android.os.Bundle; 21 import android.util.TypedValue; 22 import android.view.View; 23 import android.view.ViewGroup; 24 import android.widget.AdapterView; 25 import android.widget.AdapterView.OnItemLongClickListener; 26 import android.widget.BaseAdapter; 27 import android.widget.ImageView; 28 import android.widget.TextView; 29 import android.widget.Toast; 30 31 32 33 public class leftDelete extends Activity{ 34 private List<ApplicationInfo> mAppList; 35 private AppAdapter mAdapter; 36 private SwipeMenuListView mListView; 37 38 @Override 39 protected void onCreate(Bundle savedInstanceState) { 40 super.onCreate(savedInstanceState); 41 setContentView(R.layout.activity_list); 42 43 mAppList = getPackageManager().getInstalledApplications(0); 44 45 mListView = (SwipeMenuListView) findViewById(R.id.listView); 46 mAdapter = new AppAdapter(); 47 mListView.setAdapter(mAdapter); 48 49 // step 1. create a MenuCreator 50 SwipeMenuCreator creator = new SwipeMenuCreator() { 51 52 @Override 53 public void create(SwipeMenu menu) { 54 // create "open" item 55 SwipeMenuItem openItem = new SwipeMenuItem( 56 getApplicationContext()); 57 // set item background 58 openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9, 59 0xCE))); 60 // set item width 61 openItem.setWidth(dp2px(90)); 62 // set item title 63 openItem.setTitle("Open"); 64 // set item title fontsize 65 openItem.setTitleSize(18); 66 // set item title font color 67 openItem.setTitleColor(Color.WHITE); 68 // add to menu 69 menu.addMenuItem(openItem); 70 71 // create "delete" item 72 SwipeMenuItem deleteItem = new SwipeMenuItem( 73 getApplicationContext()); 74 // set item background 75 deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9, 76 0x3F, 0x25))); 77 // set item width 78 deleteItem.setWidth(dp2px(90)); 79 // set a icon 80 deleteItem.setIcon(R.drawable.ic_delete); 81 // add to menu 82 menu.addMenuItem(deleteItem); 83 } 84 }; 85 // set creator 86 mListView.setMenuCreator(creator); 87 88 // step 2. listener item click event 89 mListView.setOnMenuItemClickListener(new OnMenuItemClickListener() { 90 @Override 91 public void onMenuItemClick(int position, SwipeMenu menu, int index) { 92 ApplicationInfo item = mAppList.get(position); 93 switch (index) { 94 case 0: 95 // open 96 open(item); 97 break; 98 case 1: 99 // delete 100 //delete(item); 101 mAppList.remove(position); 102 mAdapter.notifyDataSetChanged(); 103 break; 104 } 105 } 106 }); 107 108 // set SwipeListener 109 mListView.setOnSwipeListener(new OnSwipeListener() { 110 111 @Override 112 public void onSwipeStart(int position) { 113 // swipe start 114 } 115 116 @Override 117 public void onSwipeEnd(int position) { 118 // swipe end 119 } 120 }); 121 122 // other setting 123 // listView.setCloseInterpolator(new BounceInterpolator()); 124 125 // test item long click 126 mListView.setOnItemLongClickListener(new OnItemLongClickListener() { 127 128 @Override 129 public boolean onItemLongClick(AdapterView<?> parent, View view, 130 int position, long id) { 131 Toast.makeText(getApplicationContext(), position + " long click", 0).show(); 132 return false; 133 } 134 }); 135 136 } 137 138 private void delete(ApplicationInfo item) { 139 // delete app 140 try { 141 Intent intent = new Intent(Intent.ACTION_DELETE); 142 intent.setData(Uri.fromParts("package", item.packageName, null)); 143 startActivity(intent); 144 } catch (Exception e) { 145 } 146 } 147 148 private void open(ApplicationInfo item) { 149 // open app 150 Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); 151 resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); 152 resolveIntent.setPackage(item.packageName); 153 List<ResolveInfo> resolveInfoList = getPackageManager() 154 .queryIntentActivities(resolveIntent, 0); 155 if (resolveInfoList != null && resolveInfoList.size() > 0) { 156 ResolveInfo resolveInfo = resolveInfoList.get(0); 157 String activityPackageName = resolveInfo.activityInfo.packageName; 158 String className = resolveInfo.activityInfo.name; 159 160 Intent intent = new Intent(Intent.ACTION_MAIN); 161 intent.addCategory(Intent.CATEGORY_LAUNCHER); 162 ComponentName componentName = new ComponentName( 163 activityPackageName, className); 164 165 intent.setComponent(componentName); 166 startActivity(intent); 167 } 168 } 169 170 class AppAdapter extends BaseAdapter { 171 172 @Override 173 public int getCount() { 174 return mAppList.size(); 175 } 176 177 @Override 178 public ApplicationInfo getItem(int position) { 179 return mAppList.get(position); 180 } 181 182 @Override 183 public long getItemId(int position) { 184 return position; 185 } 186 187 @Override 188 public View getView(int position, View convertView, ViewGroup parent) { 189 if (convertView == null) { 190 convertView = View.inflate(getApplicationContext(), 191 R.layout.item_list_app, null); 192 new ViewHolder(convertView); 193 } 194 ViewHolder holder = (ViewHolder) convertView.getTag(); 195 ApplicationInfo item = getItem(position); 196 holder.iv_icon.setImageDrawable(item.loadIcon(getPackageManager())); 197 holder.tv_name.setText(item.loadLabel(getPackageManager())); 198 return convertView; 199 } 200 201 class ViewHolder { 202 ImageView iv_icon; 203 TextView tv_name; 204 205 public ViewHolder(View view) { 206 iv_icon = (ImageView) view.findViewById(R.id.iv_icon); 207 tv_name = (TextView) view.findViewById(R.id.tv_name); 208 view.setTag(this); 209 } 210 } 211 } 212 213 private int dp2px(int dp) { 214 return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, 215 getResources().getDisplayMetrics()); 216 } 217 }
2.布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:andro>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<swipemenulistview.SwipeMenuListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>