β

Android实现ListView顶部悬浮效果源码

安度博客 » 安度博客 75 阅读

listview悬停

代码实现:

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实现ListView顶部悬浮效果源码

作者:安度博客 » 安度博客
安度博客原创分享你值得拥有
原文地址:Android实现ListView顶部悬浮效果源码, 感谢原作者分享。

发表评论