先看看效果图:
实现思路:
监听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 StickListView实现悬停效果全部内容,希望文章能够帮你解决Android StickListView实现悬停效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)