当前位置: 移动技术网 > IT编程>移动开发>Android > Android StickListView实现悬停效果

Android StickListView实现悬停效果

2019年07月24日  | 移动技术网IT编程  | 我要评论

华中科技大学武昌分校教务管理系统,热点资讯网,破冰船工作原理

先看看效果图:

实现思路

监听listview的滑动,等目的项为列表第一个可见的itemview时,添加一个一个的布局,产生悬停效果

实现代码

public class customviewacyivity extends baseactivity {

  toolbar toolbar;
  windowmanager mwindowmanager;
  windowmanager.layoutparams mwindowlayoutparams;
  textview mtv;
  boolean isshowing;//是否正在显示

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_custom_view);

    mwindowmanager = (windowmanager) getsystemservice(context.window_service);

    list<string> list = new arraylist<>();
    for (int i = 0; i < 30; i++) {
      list.add("我是第" + (i + 1) + "个选择项");
    }

    toolbar = $(r.id.toolbar);
    listview listview = $(r.id.view_list);
    listview.setadapter(new arrayadapter<>(this, r.layout.item_text, list));

    listview.setonscrolllistener(new abslistview.onscrolllistener() {
      @override
      public void onscrollstatechanged(abslistview view, int scrollstate) {
      }

      @override
      public void onscroll(abslistview view, int firstvisibleitem, int visibleitemcount, int totalitemcount) {
        if (firstvisibleitem > 8) {//滑动到目的项时,显示悬停布局
          if (!isshowing)
            show();
        } else {
          if (isshowing)
            hide();
        }
      }
    });

  }


  //显示悬停布局
  public void show() {
    isshowing = true;
    mwindowlayoutparams = new windowmanager.layoutparams();
    mwindowlayoutparams.format = pixelformat.translucent; //图片之外的其他地方透明
    mwindowlayoutparams.gravity = gravity.top;
    mwindowlayoutparams.y = toolbar.getheight() - systemutil.getstatusheight(this);//设置悬停布局显示的y坐标
    mwindowlayoutparams.width = windowmanager.layoutparams.match_parent;
    mwindowlayoutparams.height = unitutil.dp2px(this, 50);//设置悬停布局显示的高度
    mwindowlayoutparams.flags = windowmanager.layoutparams.flag_not_focusable
        | windowmanager.layoutparams.flag_not_touchable;

    //设置悬停布局,为了看起来是悬停效果,布局的内容要设置成与itemview一致
    mtv = new textview(this);
    mtv.setgravity(gravity.center);
    mtv.setbackgroundcolor(getresources().getcolor(r.color.white));
    mtv.settextsize(unitutil.px2sp(this, unitutil.dp2px(this, 16)));
    mtv.settext("我是第10个选择项");

    //添加悬停布局
    mwindowmanager.addview(mtv, mwindowlayoutparams);
  }

  //隐藏悬停布局
  public void hide() {
    if (mtv != null) {
      isshowing = false;
      mwindowmanager.removeview(mtv);
      mtv = null;
    }
  }

}

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">

  <include layout="@layout/view_toolbar" />

  <listview
    android:id="@+id/view_list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

</linearlayout>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网