华中科技大学武昌分校教务管理系统,热点资讯网,破冰船工作原理
先看看效果图:
实现思路:
监听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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android apk 项目一键打包并上传到蒲公英的实现方法
Android 自定义LineLayout实现满屏任意拖动功能的示例代码
android 限制某个操作每天只能操作指定的次数(示例代码详解)
Android 集成 google 登录并获取性别等隐私信息的实现代码
网友评论