An open API service indexing awesome lists of open source software.

https://github.com/ccapton/android-optionlayout

这是一个模仿QQ聊天列表左滑拉出菜单的控件
https://github.com/ccapton/android-optionlayout

Last synced: about 1 year ago
JSON representation

这是一个模仿QQ聊天列表左滑拉出菜单的控件

Awesome Lists containing this project

README

          

# OptionLayout
> 关于我,欢迎关注
博客:ccapton(http://blog.csdn.net/ccapton) 微信:[Ccapton]()

### 简介:

这是一个仿照QQ消息项侧滑显示菜单的自定义ViewGroup,实现侧滑弹出选项按钮的效果。

### 示例:

在QQ中是这样的

![](https://raw.githubusercontent.com/Ccapton/optionLayout/master/qq.gif)

而我的效果是这样的

![](https://raw.githubusercontent.com/Ccapton/optionLayout/master/my.gif)

### 特性

左滑出现选项按钮,例如“置顶”,“删除”。可以改为自己想要的名称,功能也可自定义
###原理说明
这是一个自定义HorizontalScrollView,在里面动态添加了两个选项按钮,通过手势滑动监测实现滚动,从而显示出选项菜单。

### 如何配置

build.gradle(Project)
``` code
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
```
build.gradle(Module:app)
``` code
dependencies {
compile 'com.github.Ccapton:OptionLayout:1.0'
}
```

### 公共方法
``` code
//设置此ViewGroup(在ListView,GridView,RecyclerView...中)所在的位置
setPosition(int position);
//设置回调,调用此ViewGroup者实现此ViewGroup的OptionClickListener接口并调用该方法。
setOptionClickListener(OptionClickListener listener);
```
### 使用方法

1.在layout目录下新建一个xml布局文件,命名自定义(例如:demo中的option_laout.xml),内容格式如下

``` xml


```
2.在例如ListView中的BaseAdapter中的getView方法中使用

(1)适配器实现接口以完成回调
``` code
class Adapter extends BaseAdapter implements OptionLayout.OptionClickListener{
...省略代码...
@Override
public void leftOptionClick(View view,int postition) {
//点击左边的按钮实现的事件,view为按钮对象,position为后续设置的item所在位置
}

@Override
public void rightOptionClick(View view,int postition) {
//点击右边的按钮实现的事件,view为按钮对象,position为后续设置的item所在位置
}

@Override
public void itemClick(View view,int postition) {
//点击整个item实现的事件,view为整个OptionLayout对象,position为后续设置的item所在位置
}
}
```
(2)OptionLayout在适配器中的使用
``` code
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder=null;
if(convertView==null){
convertView= inflater.inflate(R.layout.option_layout,parent,false);//R.layout.option_layout即为我们自己写的一个xml文件,把它inflate进来就可以了
viewHolder=new ViewHolder(convertView);
convertView.setTag(viewHolder);
}else {
viewHolder= (ViewHolder) convertView.getTag();
}

((OptionLayout)convertView).setOptionClickListener(this); //强转为我们的OptionLaout,为适配器回调事件,例如点击事件,以实现我们的效果
((OptionLayout)convertView).setPosition(position); // 设置OptionLayout这个View在ListView中的位置。
viewHolder.textView.setText(dataList.get(position));

return convertView;
}
```
### 作者的话
挺简单的一个自定义View,主要是实现了我想要效果就行,大家试试就行,源码仅供参考。