要在ListView侧滑时出现删除等按钮,见下面效果图:

实现起来很简单,使用HorizontalScrollView将正常显示的item层及操作按钮层水平并排起来,滑动时再将操作按钮显示出来,详见代码:

(1)MainActivity.java

package com.justlcw.csdn;import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.ListView;public class MainActivity extends Activity
{private ListView mListView;private MyAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mListView = (ListView) findViewById(R.id.listView);DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);mAdapter = new MyAdapter(this, dm.widthPixels);//ListViewmListView.setAdapter(mAdapter);}
}

(2)MyAdapter.java

package com.justlcw.csdn;import java.util.ArrayList;
import java.util.List;import android.content.Context;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.HorizontalScrollView;
import android.widget.TextView;public class MyAdapter extends BaseAdapter implements View.OnClickListener
{  /** * 这个用来填充list */  private List<Integer> colors;  /** * context上下文,用来获得convertView */  private Context mContext;  /** * 屏幕宽度,由于我们用的是HorizontalScrollView,所以按钮选项应该在屏幕外 */  private int mScreentWidth;  /** * 构造方法 * @param context * @param screenWidth */  public MyAdapter(Context context, int screenWidth)  {  //初始化  mContext = context;  mScreentWidth = screenWidth;  //填充list的内容  colors = new ArrayList<Integer>();  for (int i = 0; i < 5; i++)  {  colors.add(R.color.blue);  }  }  @Override  public int getCount()  {  return colors.size();  }  @Override  public Object getItem(int position)  {  return position;  }  @Override  public long getItemId(int position)  {  return position;  }  @Override  public View getView(int position, View convertView, ViewGroup parent)  {  final ViewHolder holder;  //如果没有设置过,初始化convertView  if (convertView == null)  {  //获得设置的view  convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, parent, false);  //初始化holder  holder = new ViewHolder();  /*** 整个item的水平滚动层*/holder.itemHorizontalScrollView = (HorizontalScrollView) convertView.findViewById(R.id.hsv);  /*** 操作按钮层*/holder.actionLayout = convertView.findViewById(R.id.ll_action);  holder.btOne = (Button) convertView.findViewById(R.id.button1);  holder.btTwo = (Button) convertView.findViewById(R.id.button2);  holder.btThree = (Button) convertView.findViewById(R.id.button3);  //把位置放到view中,这样点击事件就可以知道点击的是哪一条item  holder.btOne.setTag(position);  holder.btTwo.setTag(position);  holder.btThree.setTag(position);  holder.tvContent = (TextView) convertView.findViewById(R.id.tv);  //设置内容view的大小为屏幕宽度,这样按钮就正好被挤出屏幕外  holder.normalItemContentLayout = convertView.findViewById(R.id.ll_content);  LayoutParams lp = holder.normalItemContentLayout.getLayoutParams();  lp.width = mScreentWidth;  convertView.setTag(holder);  }  else//有直接获得ViewHolder  {  holder = (ViewHolder) convertView.getTag();  }  //设置监听事件  convertView.setOnTouchListener(new View.OnTouchListener()  {  @Override  public boolean onTouch(View v, MotionEvent event)  {  switch (event.getAction())  {  case MotionEvent.ACTION_UP:  //获得ViewHolder  ViewHolder viewHolder = (ViewHolder) v.getTag();  //获得HorizontalScrollView滑动的水平方向值.  int scrollX = viewHolder.itemHorizontalScrollView.getScrollX();  //获得操作区域的长度  int actionW = viewHolder.actionLayout.getWidth();  //注意使用smoothScrollTo,这样效果看起来比较圆滑,不生硬  //如果水平方向的移动值<操作区域的长度的一半,就复原  if (scrollX < actionW / 2)  {  viewHolder.itemHorizontalScrollView.smoothScrollTo(0, 0);  }  else//否则的话显示操作区域  {  viewHolder.itemHorizontalScrollView.smoothScrollTo(actionW, 0);  }  return true;  }  return false;  }  });  //这里防止删除一条item后,ListView处于操作状态,直接还原  if (holder.itemHorizontalScrollView.getScrollX() != 0)  {  holder.itemHorizontalScrollView.scrollTo(0, 0);  }  //设置背景颜色,设置填充内容.  holder.normalItemContentLayout.setBackgroundResource(colors.get(position));  holder.tvContent.setText("" + position);  //设置监听事件  holder.btOne.setOnClickListener(this);  holder.btTwo.setOnClickListener(this);  holder.btThree.setOnClickListener(this);  return convertView;  }  /** * ViewHolder *@Title: *@Description:主要是避免了不断的view获取初始化. *@Author:justlcw *@Since:2013-11-22 *@Version: */  class ViewHolder  {  public HorizontalScrollView itemHorizontalScrollView;  /*** 正常(没左侧滑)情况的item内容布局*/public View normalItemContentLayout;  public TextView tvContent;  /*** 删除,添加,变色操作按钮层*/public View actionLayout;  public Button btOne;  public Button btTwo;  public Button btThree;  }  @Override  public void onClick(View v)  {  int position = (Integer) v.getTag();  switch (v.getId())  {  case R.id.button1:  colors.add(R.color.blue);  break;  case R.id.button2:  colors.remove(position);  break;  case R.id.button3:  if (colors.get(position) == R.color.blue)  {  colors.set(position, R.color.red);  }  else  {  colors.set(position, R.color.blue);  }  break;  default:  break;  }  //刷新ListView内容  notifyDataSetChanged();  }
}  

(3)主界面布局activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="wrap_content" ></ListView></RelativeLayout>

(4)item界面布局item_list.xml

<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/hsv"android:layout_width="wrap_content"android:layout_height="80dip"android:scrollbars="none" ><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="horizontal" ><!-- 没有左侧滑操作的item显示界面 --><LinearLayoutandroid:id="@+id/ll_content"android:layout_width="match_parent"android:layout_height="match_parent" ><TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="" /></LinearLayout><!-- 左侧滑操作后的显示出的操作按钮层 --><LinearLayoutandroid:id="@+id/ll_action"android:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="horizontal" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="match_parent"android:background="@android:color/darker_gray"android:paddingLeft="20dip"android:paddingRight="20dip"android:text="@string/action1" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="2dip"android:layout_marginRight="2dip"android:background="@android:color/darker_gray"android:paddingLeft="20dip"android:paddingRight="20dip"android:text="@string/action2" /><Buttonandroid:id="@+id/button3"android:layout_width="wrap_content"android:layout_height="match_parent"android:background="@android:color/darker_gray"android:paddingLeft="20dip"android:paddingRight="20dip"android:text="@string/action3" /></LinearLayout></LinearLayout></HorizontalScrollView>

(5)color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><color name="red">#f5c662</color><color name="blue">#96cff7</color></resources>

(6)strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><string name="app_name">ListViewSlidingMenu</string><string name="action1"> 添 加 </string><string name="action2"> 删 除 </string><string name="action3"> 变 色 </string></resources>

源代码见附件

另可参考:

http://blog.csdn.net/chaishen10000/article/details/22527365

ListView 仿QQ微信侧滑出现删除按钮相关推荐

  1. android 自定义 滑动删除,Android_Android ListView实现仿iPhone实现左滑删除按钮的简单实例,需要自定义ListView。这里就交Fl - phpStudy...

    Android ListView实现仿iPhone实现左滑删除按钮的简单实例 需要自定义ListView.这里就交FloatDelListView吧. 复写onTouchEvent方法.如下: @Ov ...

  2. 自定义 View(一)仿 QQ 列表 Item 侧拉删除功能

    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/ ...

  3. 仿QQ对话列表滑动删除与置顶的原理及实现

    接下来,我们将完成QQ聊天界面的ListView滑动效果,大家可能都用过ListView,知道ListView是上下滑动的,并不会产生左右滑动的效果,如果想让ListView变成左右滑动的效果,必须对 ...

  4. Android仿qq聊天记录长按删除功能效果

    最近项目在做IM即时通讯开发,在删除聊天列表的时候跟删除聊天详细信息的时候,产品经理想要跟ios一样,在当前选中行上方弹出一个删除窗口.于是先从网上找demo,找了一个发现是Dialog做的,我感觉没 ...

  5. 安卓SlideMenu 仿QQ 主页侧滑菜单

    先上图 仿qq 5.0 Activity 代码 package custom.community.com.mydemo;import android.os.Build; import android. ...

  6. android 仿qq的侧滑删除功能

    最近 产品 想让我们开发人员在收藏功能中添加一个类似qq侧滑删除的功能,说实话这个在网上一找一大把,但每个人都有每个人的方法 ,在借鉴前辈们的思路下,找到自己方法.我在adapter下 添加一个回调接 ...

  7. android qq语音按钮,Android 仿QQ/微信语音功能。

    简单仿照一个语音效果,效果图: 所以,首先先做一个Dialog用于展示我们说话的UI: VoiceDialogManager.java /** * 语音Dialog 管理器 * Created by ...

  8. Android仿QQ列表滑动弹出按钮、长按提示、刷新列表

    为什么80%的码农都做不了架构师?>>>    原理:  ScrollView(刷新) + ListView(弹出按钮) 说明:由于能力有限,刷新和滑动弹出按钮都是第三方的libra ...

  9. 高德地图实现仿qq,微信发送位置功能实现逻辑

    定位获取当前位置 地图中间放置大头针 周边展示位置信息 周边信息点击后的逻辑操作 地图截屏功能实现 发送图片到其他页面或者服务器 获取到信息进行展示 写的不好,勿喷,有疑问可以联系我qq 130888 ...

最新文章

  1. IIS配置跨服务器迁移
  2. 李飞飞AI100报告第二弹,提出14大AI机遇与挑战,82页pdf
  3. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
  4. 河南大学明德计划2020计算机学院,关于选拔2020级物理学“明德计划”实验班学生的通知...
  5. 面向对象2(构造方法、抽象类、接口)
  6. 支付宝招兼职“找茬程序员” 不用坐班/最高奖励36万
  7. 2014年职称计算机word2003,2014年职称计算机考试Word2003模拟题及答案5
  8. Android之RxJava(一)
  9. 印度孟买机器人餐厅_2020,送餐机器人的海外市场爆发之年
  10. android焦点优先级,Viewgroup焦点获取优先级android:descendantFocusability用法简析
  11. 受新冠病毒影响,谷歌延迟发布 Chrome 和 Chrome OS 安全更新版本
  12. 开源字体 思源黑体 思源宋体 2.001 ttf格式
  13. c8网络语言意思,求一些比较经典的网络用语
  14. 微信打飞机html 游戏代码,JavaScript仿微信打飞机游戏
  15. SSH和SSM有什么区别?
  16. 输出200以内所有素数(python)
  17. 【Zigbee】基础篇(4) Zigbee无线通信过程、无线发送温湿度信息
  18. 【毕业设计】基于人脸登录的大学生快递系统
  19. git:info: detecting host provider for ‘https://gitee.com/‘...
  20. 小游戏系列算法之五广度优先搜索,双向广搜,八数码,华容道

热门文章

  1. python字符串排列组合子集_python编程题:字符串的(所有可能的)排列组合
  2. 实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)
  3. 【题解】【AcWing】3374. 进制转换2
  4. golang —— go语言科学记数法使用
  5. macOS 安装lrzsz
  6. commit work php,GitHub - sbzhu/weworkapi_php: official lib of wework api
  7. 广西交通职业技术学院计算机专业在哪个校区,广西交通职业技术学院宿舍怎么样...
  8. python埃及分数_送你一份低折扣书单,Python就占了6本,人工智能2本
  9. 嵌入式开发工具介绍与下载
  10. 自己动手搭建一个简单的静态资源服务器