美文网首页技术首页投稿(暂停使用,暂停投稿)程序员
刷卡布局效果-开源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