欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android StickListView实现悬停效果

程序员文章站 2024-03-04 09:11:41
先看看效果图: 实现思路: 监听listview的滑动,等目的项为列表第一个可见的itemview时,添加一个一个的布局,产生悬停效果 实现代码: pu...

先看看效果图:

Android StickListView实现悬停效果

实现思路

监听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>

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