Android使用SwipeMenuListView第三方控件实现QQ中消息水平作用滑动删除置顶

来源:互联网 发布:jenkins mac 安装包 编辑:程序博客网 时间:2024/06/04 20:03

       在23code上http://www.23code.com/swipemenulistview/,看类似qq消息列表中,当你进行水平滑动item时,可进行一些置顶删除等操作的效果:


      通过使用第三方开源组件SwipeMenuListView,可以实现这种效果,开源代码可以https://github.com/baoyongzhang/SwipeMenuListView下载


  之后将library中类复制到自己的项目中,或引用到自己的项目中,此处复制到自己的项目里。

先看下效果图:


接着对第三方开源组件进行使用:

布局文件:activity_list.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"    tools:context="${relativePackage}.${activityClass}" >    <com.example.swipemenulistview.code.SwipeMenuListView        android:id="@+id/listView"        android:layout_width="match_parent"        android:layout_height="match_parent" /></RelativeLayout>
item_list.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="wrap_content"    android:padding="8dp" >    <ImageView        android:id="@+id/iv_icon"        android:layout_width="50dp"        android:layout_height="50dp"        android:src="@drawable/ic_launcher" />    <TextView        android:id="@+id/tv_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerVertical="true"        android:layout_marginLeft="10dp"        android:layout_toRightOf="@+id/iv_icon"        android:text="name"        android:textColor="@android:color/black"        android:textSize="18sp" /></RelativeLayout>
java代码:

package com.example.swipemenulistview;import java.util.List;import com.example.swipemenulistview.code.SwipeMenu;import com.example.swipemenulistview.code.SwipeMenuCreator;import com.example.swipemenulistview.code.SwipeMenuItem;import com.example.swipemenulistview.code.SwipeMenuListView;import com.example.swipemenulistview.code.SwipeMenuListView.OnMenuItemClickListener;import com.example.swipemenulistview.code.SwipeMenuListView.OnSwipeListener;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.pm.ApplicationInfo;import android.content.pm.ResolveInfo;import android.graphics.Color;import android.graphics.drawable.ColorDrawable;import android.net.Uri;import android.os.Bundle;import android.util.TypedValue;import android.view.View;import android.view.ViewGroup;import android.view.animation.BounceInterpolator;import android.widget.AdapterView;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;public class SimpleActivity extends Activity {private List<ApplicationInfo> mAppList;private AppAdapter mAdapter;private SwipeMenuListView mListView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_list);mAppList = getPackageManager().getInstalledApplications(0);mListView = (SwipeMenuListView) findViewById(R.id.listView);mAdapter = new AppAdapter();mListView.setAdapter(mAdapter);// step 1. create a MenuCreatorSwipeMenuCreator creator = new SwipeMenuCreator() {@Overridepublic void create(SwipeMenu menu) {// create "open" itemSwipeMenuItem topItem = new SwipeMenuItem(getApplicationContext());// set item backgroundtopItem.setBackground(new ColorDrawable(Color.YELLOW));// set item widthtopItem.setWidth(dp2px(90));// set item titletopItem.setTitle("置顶");// set item title fontsizetopItem.setTitleSize(18);// set item title font colortopItem.setTitleColor(Color.WHITE);// add to menumenu.addMenuItem(topItem);SwipeMenuItem openItem = new SwipeMenuItem(getApplicationContext());// set item backgroundopenItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,0xCE)));// set item widthopenItem.setWidth(dp2px(90));// set item titleopenItem.setTitle("Open");// set item title fontsizeopenItem.setTitleSize(18);// set item title font coloropenItem.setTitleColor(Color.WHITE);// add to menumenu.addMenuItem(openItem);// create "delete" itemSwipeMenuItem deleteItem = new SwipeMenuItem(getApplicationContext());// set item background//deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,//0x3F, 0x25)));deleteItem.setBackground(new ColorDrawable(Color.RED));// set item widthdeleteItem.setWidth(dp2px(90));// set a icondeleteItem.setIcon(R.drawable.ic_delete);// add to menumenu.addMenuItem(deleteItem);}};// set creatormListView.setMenuCreator(creator);// step 2. listener item click eventmListView.setOnMenuItemClickListener(new OnMenuItemClickListener() {@Overridepublic void onMenuItemClick(int position, SwipeMenu menu, int index) {// TODO Auto-generated method stubApplicationInfo item = mAppList.get(position);switch (index) {case 0:// 置顶mAppList.remove(position);mAppList.add(0, item);mAdapter.notifyDataSetChanged();break;case 1:// openopen(item);break;case 2:// deletedelete(item);mAppList.remove(position);mAdapter.notifyDataSetChanged();break;}}});mListView.setOnSwipeListener(new OnSwipeListener() {@Overridepublic void onSwipeStart(int position) {// swipe start}@Overridepublic void onSwipeEnd(int position) {// swipe end}});// other setting//mListView.setCloseInterpolator(new BounceInterpolator());// test item long clickmListView.setOnItemLongClickListener(new OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> parent, View view,int position, long id) {Toast.makeText(getApplicationContext(), position + " long click", 0).show();return false;}});}private void delete(ApplicationInfo item) {// delete apptry {Intent intent = new Intent(Intent.ACTION_DELETE);intent.setData(Uri.fromParts("package", item.packageName, null));startActivity(intent);} catch (Exception e) {}}   private void open(ApplicationInfo item) {// open appIntent resolveIntent = new Intent(Intent.ACTION_MAIN, null);resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);resolveIntent.setPackage(item.packageName);List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(resolveIntent, 0);if (resolveInfoList != null && resolveInfoList.size() > 0) {ResolveInfo resolveInfo = resolveInfoList.get(0);String activityPackageName = resolveInfo.activityInfo.packageName;String className = resolveInfo.activityInfo.name;Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);ComponentName componentName = new ComponentName(activityPackageName, className);intent.setComponent(componentName);startActivity(intent);}}class AppAdapter extends BaseAdapter {@Overridepublic int getCount() {return mAppList.size();}@Overridepublic ApplicationInfo getItem(int position) {return mAppList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = View.inflate(getApplicationContext(),R.layout.item_list_app, null);new ViewHolder(convertView);}ViewHolder holder = (ViewHolder) convertView.getTag();ApplicationInfo item = getItem(position);holder.iv_icon.setImageDrawable(item.loadIcon(getPackageManager()));holder.tv_name.setText(item.loadLabel(getPackageManager()));return convertView;}class ViewHolder {ImageView iv_icon;TextView tv_name;public ViewHolder(View view) {iv_icon = (ImageView) view.findViewById(R.id.iv_icon);tv_name = (TextView) view.findViewById(R.id.tv_name);view.setTag(this);}}}private int dp2px(int dp) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,getResources().getDisplayMetrics());}}



点击下载




0 0
原创粉丝点击