Android开源框架SwipeMenuListView
效果:
如图:
使用:
一.布局文件
<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.swip.swipemenulistview.SwipeMenuListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
二.java代码:
1.实例化自定View
SwipeMenuListView mListView= (SwipeMenuListView) findViewById(R
.id.listView)
2.创建适配器,其实是一个继承BaseAdapter的类
AppAdapter mAdapter =
new AppAdapter();
3.給ListView添加适配器
mListView
.setAdapter(mAdapter)
具体代码看示例。。。
mListView
.setMenuCreator(creator)
6.设置各种监听
//设置点击
Item里面控件的监听
mListView.setOnMenuItemClickListener
//设置点击
Item条目的监听,长按
Item条目的监听等等监听
其实SwipeMenuListView就是一个List View,不过这里多设置了几个方法,并添加了以恶小手势判断等等。
主方法类示例:
package com.example.swip;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.swip.swipemenulistview.*;
import java.util.ArrayList;
import java.util.List;
public class MyActivity extends Activity {
private List<String> list =
new ArrayList<String>();
private AppAdapter mAdapter;
private SwipeMenuListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
for (
int i =
0; i <
100; i++) {
list.add(
"item" + i +
"行");
}
mListView = (SwipeMenuListView) findViewById(R.id.listView);
mAdapter =
new AppAdapter();
mListView.setAdapter(mAdapter);
SwipeMenuCreator creator =
new SwipeMenuCreator() {
@Override
public void create(SwipeMenu menu) {
SwipeMenuItem openItem =
new SwipeMenuItem(
getApplicationContext());
openItem.setBackground(
new ColorDrawable(Color.rgb(
0xC9,
0xC9,
0xCE)));
openItem.setWidth(dp2px(
90));
openItem.setTitle(
"Open");
openItem.setTitleSize(
18);
openItem.setTitleColor(Color.WHITE);
menu.addMenuItem(openItem);
SwipeMenuItem deleteItem =
new SwipeMenuItem(
getApplicationContext());
deleteItem.setBackground(
new ColorDrawable(Color.rgb(
0xF9,
0x3F,
0x25)));
deleteItem.setWidth(dp2px(
90));
deleteItem.setIcon(R.drawable.ic_delete);
menu.addMenuItem(deleteItem);
}
};
mListView.setMenuCreator(creator);
mListView.setOnMenuItemClickListener(
new SwipeMenuListView.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(
int position, SwipeMenu menu,
int index) {
String item = list.get(position);
switch (index) {
case 0:
Toast.makeText(MyActivity.
this,
"点击了open",Toast.LENGTH_LONG).show();
break;
case 1:
list.remove(position);
mAdapter.notifyDataSetChanged();
break;
}
return false;
}
});
mListView.setOnItemLongClickListener(
new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position,
long id) {
Toast.makeText(getApplicationContext(), position +
" long click", Toast.LENGTH_SHORT).show();
return false;
}
});
mListView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position,
long id) {
Toast.makeText(getApplicationContext(), position +
" click", Toast.LENGTH_SHORT).show();
}
});
}
class AppAdapter extends BaseSwipListAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public String
getItem(
int position) {
return list.get(position);
}
@Override
public long getItemId(
int position) {
return position;
}
@Override
public View
getView(
int position, View convertView, ViewGroup parent) {
if (convertView ==
null) {
convertView = View.inflate(getApplicationContext(),
R.layout.item_list,
null);
new ViewHolder(convertView);
}
ViewHolder holder = (ViewHolder) convertView.getTag();
String item = getItem(position);
holder.iv_icon.setImageResource(R.drawable.ic_launcher);
holder.tv_name.setText(item );
holder.iv_icon.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MyActivity.
this,
"点击了图标", Toast.LENGTH_SHORT).show();
}
});
holder.tv_name.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MyActivity.
this,
"点击了文字", Toast.LENGTH_SHORT).show();
}
});
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);
}
}
@Override
public boolean getSwipEnableByPosition(
int position) {
return true;
}
}
private int dp2px(
int dp) {
return (
int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
getResources().getDisplayMetrics());
}
}
下面是我程序的源码:
http://download.csdn.net/detail/wenzhi20102321/9812332
随便也提供一下经过我简单修改后可运行的复杂源码(简单注释了Menu资源调用,否则不能运行程序): http://download.csdn.net/detail/wenzhi20102321/9812331
注意:程序运行需要V4兼容包!
复杂源码效果:
其实一般应用简单效果就够了,所有的Item滑出的效果一样!复杂效果就是根据条目的内容或属性不同设置滑动后显示的数据不同,用得较少!
共勉:程序袁靠的是一种信念,说不清道不明!