ListView 仿QQ微信侧滑出现删除按钮
要在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微信侧滑出现删除按钮相关推荐
- android 自定义 滑动删除,Android_Android ListView实现仿iPhone实现左滑删除按钮的简单实例,需要自定义ListView。这里就交Fl - phpStudy...
Android ListView实现仿iPhone实现左滑删除按钮的简单实例 需要自定义ListView.这里就交FloatDelListView吧. 复写onTouchEvent方法.如下: @Ov ...
- 自定义 View(一)仿 QQ 列表 Item 侧拉删除功能
博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此 博主:威威喵 | 博客主页:https://blog.csdn.net/ ...
- 仿QQ对话列表滑动删除与置顶的原理及实现
接下来,我们将完成QQ聊天界面的ListView滑动效果,大家可能都用过ListView,知道ListView是上下滑动的,并不会产生左右滑动的效果,如果想让ListView变成左右滑动的效果,必须对 ...
- Android仿qq聊天记录长按删除功能效果
最近项目在做IM即时通讯开发,在删除聊天列表的时候跟删除聊天详细信息的时候,产品经理想要跟ios一样,在当前选中行上方弹出一个删除窗口.于是先从网上找demo,找了一个发现是Dialog做的,我感觉没 ...
- 安卓SlideMenu 仿QQ 主页侧滑菜单
先上图 仿qq 5.0 Activity 代码 package custom.community.com.mydemo;import android.os.Build; import android. ...
- android 仿qq的侧滑删除功能
最近 产品 想让我们开发人员在收藏功能中添加一个类似qq侧滑删除的功能,说实话这个在网上一找一大把,但每个人都有每个人的方法 ,在借鉴前辈们的思路下,找到自己方法.我在adapter下 添加一个回调接 ...
- android qq语音按钮,Android 仿QQ/微信语音功能。
简单仿照一个语音效果,效果图: 所以,首先先做一个Dialog用于展示我们说话的UI: VoiceDialogManager.java /** * 语音Dialog 管理器 * Created by ...
- Android仿QQ列表滑动弹出按钮、长按提示、刷新列表
为什么80%的码农都做不了架构师?>>> 原理: ScrollView(刷新) + ListView(弹出按钮) 说明:由于能力有限,刷新和滑动弹出按钮都是第三方的libra ...
- 高德地图实现仿qq,微信发送位置功能实现逻辑
定位获取当前位置 地图中间放置大头针 周边展示位置信息 周边信息点击后的逻辑操作 地图截屏功能实现 发送图片到其他页面或者服务器 获取到信息进行展示 写的不好,勿喷,有疑问可以联系我qq 130888 ...
最新文章
- IIS配置跨服务器迁移
- 李飞飞AI100报告第二弹,提出14大AI机遇与挑战,82页pdf
- 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
- 河南大学明德计划2020计算机学院,关于选拔2020级物理学“明德计划”实验班学生的通知...
- 面向对象2(构造方法、抽象类、接口)
- 支付宝招兼职“找茬程序员” 不用坐班/最高奖励36万
- 2014年职称计算机word2003,2014年职称计算机考试Word2003模拟题及答案5
- Android之RxJava(一)
- 印度孟买机器人餐厅_2020,送餐机器人的海外市场爆发之年
- android焦点优先级,Viewgroup焦点获取优先级android:descendantFocusability用法简析
- 受新冠病毒影响,谷歌延迟发布 Chrome 和 Chrome OS 安全更新版本
- 开源字体 思源黑体 思源宋体 2.001 ttf格式
- c8网络语言意思,求一些比较经典的网络用语
- 微信打飞机html 游戏代码,JavaScript仿微信打飞机游戏
- SSH和SSM有什么区别?
- 输出200以内所有素数(python)
- 【Zigbee】基础篇(4) Zigbee无线通信过程、无线发送温湿度信息
- 【毕业设计】基于人脸登录的大学生快递系统
- git:info: detecting host provider for ‘https://gitee.com/‘...
- 小游戏系列算法之五广度优先搜索,双向广搜,八数码,华容道
热门文章
- python字符串排列组合子集_python编程题:字符串的(所有可能的)排列组合
- 实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)
- 【题解】【AcWing】3374. 进制转换2
- golang —— go语言科学记数法使用
- macOS 安装lrzsz
- commit work php,GitHub - sbzhu/weworkapi_php: official lib of wework api
- 广西交通职业技术学院计算机专业在哪个校区,广西交通职业技术学院宿舍怎么样...
- python埃及分数_送你一份低折扣书单,Python就占了6本,人工智能2本
- 嵌入式开发工具介绍与下载
- 自己动手搭建一个简单的静态资源服务器