Android可左右滑动的ListView开源框架SwipeMenuListView

    xiaoxiao2021-04-14  72

    Android开源框架SwipeMenuListView

    开源框架SwipeMenuListView可以让ListView条目可滑动,并且在条目上面添加控件,并设置点击事件。

    效果:

    上面是我从源码中把主要的八个类,复制到我的项目中,就可以长久使用这个开源框架。而且直接复制网上的源码还是有点问题的(比如Menu资源文件报错!)

    如图:

    使用:

    一.布局文件

    <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);

    4.创建SwipeMenuCreator对象,可以在里面设置滑动Itme后显示的视图控件,可以设置想要的个数。

    具体代码看示例。。。

    5.給SwipeMenuListView 添加SwipeMenuCreator对象

    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); // step 1. create a MenuCreator SwipeMenuCreator creator = new SwipeMenuCreator() { @Override public void create(SwipeMenu menu) { // create "open" item SwipeMenuItem openItem = new SwipeMenuItem( getApplicationContext()); // set item background openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9, 0xCE))); // set item width openItem.setWidth(dp2px(90)); // set item title openItem.setTitle("Open"); // set item title fontsize openItem.setTitleSize(18); // set item title font color openItem.setTitleColor(Color.WHITE); // add to menu menu.addMenuItem(openItem); // create "delete" item SwipeMenuItem deleteItem = new SwipeMenuItem( getApplicationContext()); // set item background deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9, 0x3F, 0x25))); // set item width deleteItem.setWidth(dp2px(90)); // set a icon deleteItem.setIcon(R.drawable.ic_delete); // add to menu menu.addMenuItem(deleteItem); } }; // set creator mListView.setMenuCreator(creator); // step 2. listener item click event mListView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(int position, SwipeMenu menu, int index) { String item = list.get(position); switch (index) { case 0: // open Toast.makeText(MyActivity.this,"点击了open",Toast.LENGTH_LONG).show(); break; case 1: // delete // delete(item); list.remove(position); mAdapter.notifyDataSetChanged(); break; } return false; } }); // other setting // listView.setCloseInterpolator(new BounceInterpolator()); // test item long click 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; } }); // test item click 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) { //设置条目是否可以滑动 // if (position % 2 == 0) { // return false; // } 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滑出的效果一样!复杂效果就是根据条目的内容或属性不同设置滑动后显示的数据不同,用得较少!

    共勉:程序袁靠的是一种信念,说不清道不明!

    转载请注明原文地址: https://ju.6miu.com/read-669936.html

    最新回复(0)