美文网首页技术首页投稿(暂停使用,暂停投稿)程序员
刷卡布局效果-开源AndroidSwipeLayout使用解析(

刷卡布局效果-开源AndroidSwipeLayout使用解析(

作者: 逐悦 | 来源:发表于2016-04-29 23:21 被阅读2709次

上一篇解析了AndroidSwipeLayout的普通用法
这一次我们来看一下它在ListView中的使用,同样我们分析官方的sample来学习如何使用
在上一篇忘了给出它的gradle配置

<code>
compile "com.daimajia.swipelayout:library:1.2.0@aar"
compile 'com.nineoldandroids:library:2.4.0'
compile 'jp.wasabeef:recyclerview-animators:1.0.3@aar'
</code>

同样看分析布局文件
listview.xml
listview_item.xml
结果这两个布局都非常简单,所以我们就不分析了

那我们就进入代码分析环节
ListViewExample.java

<code>mListView = (ListView) findViewById(R.id.listview);
mAdapter = new ListViewAdapter(this);</code>

这两句进行初始化,ListView,ListViewAdapter(ListViewAdapter我们下面详细解析)

<code>mAdapter.setMode(Attributes.Mode.Single);</code>

这句代码是设置Adapter的模式,Attributes.Mode.Single代表只有一个拖拽打开的时候,其他的关闭,在例子apk中可以体验出

<code>
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> parent,
View view,
int position,
long id) {
((SwipeLayout)(mListView
.getChildAt(position-mListView
.getFirstVisiblePosition())))
.open(true);}});
</code>

设置listview的itemclick监听,当点击的时候,打开swipeLaout

<code>
mListView.setOnTouchListener(
new View.OnTouchListener() {
@Override public boolean onTouch(View v, MotionEvent event{
Log.e("ListView", "OnTouch");
System.out.println("OnTouch");
return false;
}});</code>

设置listview的touch监听

<code>
mListView.setOnItemLongClickListener(
new AdapterView.OnItemLongClickListener() {
@Override public boolean onItemLongClick(
AdapterView<?> parent,
View view,
int position,
long id) {
System.out.println("OnItemLongClickListener");
return true; }});
</code>

设置ListView的OnItemLongClick的监听

<code>
mListView.setOnScrollListener(
new AbsListView.OnScrollListener() {
@Override public void onScrollStateChanged(
AbsListView view,
int scrollState) {
Log.e("ListView", "onScrollStateChanged");
System.out.println("onScrollStateChanged"); }
@Override public void onScroll(AbsListView view,
int firstVisibleItem,
int visibleItemCount,
int totalItemCount) {
System.out.println("onScroll"); }});
</code>

设置ListView的OnItemSelected监听

<code>
mListView.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.e("ListView", "onItemSelected:" + position);
System.out.println("onItemSelected " + position); }
@Override
public void onNothingSelected(AdapterView<?> parent) {
Log.e("ListView", "onNothingSelected:");
System.out.println("onNothingSelected: "); }});
</code>

然后分析ListViewAdapter

~~发现ListViewAdapter继承自BaseSwipeAdapter,
BaseSwipeAdapter继承自BaseAdapter

<code> BaseSwipeAdapter是一个抽象类,子类需要实现
getSwipeLayoutResourceId,generateView,fillValues,getCount, getItem,getItemId函数</code>

*getCount,getItem,getItemId函数实现和BaseAdapter中一样
*getSwipeLayoutResourced需要返回一个Swipelayout的id,便于对其的处理
generateView函数用于生成一个View,和BaseAdapter的getView的用法基本一样,不同的是在这里可以不处理view的复用,因为BaseSwipeAdapter中已经封装了view的复用处理
*fillValues在这个函数中填充数据

下面看例子中的ListViewAdapter的实现

<code>
@Override
public int getSwipeLayoutResourceId(int position) { return R.id.swipe;}
返回的是ListView_item.xml中的swipelayout的id
</code>

个人感觉简书的markdown太难用了,贴代码不方便直接上图了

Paste_Image.png Paste_Image.png

ok,listView使用AndroidSwipeLayout结束,下次分析RecyclerViewr使用它

相关文章

网友评论

  • YungFan:简书贴代码很方便啊,而且很好看。
  • 左蓝:markdown代码段语法是
    '''
    code
    '''
    下次试试~~'code'这样是不跨行的短代码用的~
    逐悦:@左蓝 ok,试试

本文标题:刷卡布局效果-开源AndroidSwipeLayout使用解析(

本文链接:https://www.haomeiwen.com/subject/rlfkrttx.html