Listview滑动(隐藏、显示)Bannner(topview)图
2016-08-30 16:23
447 查看
使用android studio的ScrollingActivity 来实现这个功能 public class ScrollingActivity extends AppCompatActivity { LMBanners lmBanners; MyListView listView; Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scrolling); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); context=this; FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); lmBanners = (LMBanners) findViewById(R.id.banner); localImages.add(R.drawable.img2928); localImages.add(R.drawable.img4458); localImages.add(R.mipmap.ic_launcher); lmBanners.setAdapter(new LocalImgAdapter(this), localImages); listView= (MyListView) findViewById(R.id.listview); listView.setAdapter(new ListAdapter()); } public class ListAdapter extends BaseAdapter{ @Override public int getCount() { return 20; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = LayoutInflater.from(context).inflate(R.layout.item2, null); return view; } } private ArrayList<Integer> localImages = new ArrayList<Integer>(); public class LocalImgAdapter implements LBaseAdapter<Integer> { private Context mContext; public LocalImgAdapter(Context context) { mContext = context; } @Override public View getView(final LMBanners lBanners, final Context context, int position, Integer data) { View view = LayoutInflater.from(mContext).inflate(R.layout.item, null); ImageView imageView = (ImageView) view.findViewById(R.id.id_image); imageView.setImageResource(data); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); return view; } }
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.zhjy.myapplication.ScrollingActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="@dimen/app_bar_height" android:fitsSystemWindows="true" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/toolbar_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical"> <com.allure.lbanners.LMBanners android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="match_parent"> </com.allure.lbanners.LMBanners> </LinearLayout> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/AppTheme.PopupOverlay"> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_scrolling" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/fab_margin" app:layout_anchor="@id/app_bar" app:layout_anchorGravity="bottom|end" app:srcCompat="@android:drawable/ic_dialog_email" /> </android.support.design.widget.CoordinatorLayout>
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.zhjy.myapplication.ScrollingActivity" tools:showIn="@layout/activity_scrolling"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.zhjy.myapplication.MyListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent"> </com.zhjy.myapplication.MyListView> </LinearLayout> </android.support.v4.widget.NestedScrollView>
以前的实现效果
效果图在这里
部分代码
所关联listview的滑动监听事件
AbsListView.OnScrollListener ScrollListener = new AbsListView.OnScrollListener() {
/**
* 滑动时被调用
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
lbfirstVisibleItem = firstVisibleItem;
lbvisibleItemCount = visibleItemCount;
visibleLastIndex = firstVisibleItem + visibleItemCount - 1;
if (firstVisibleItem >= 1) { sendBannerState(-1);//通知 主activity的 } else { sendBannerState(1); } } /** * 滑动状态改变时被调用 */ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { int itemsLastIndex = adapter.getCount() - 1; //数据集最后一项的索引 int lastIndex = itemsLastIndex + 1; //加上底部的loadMoreView项 if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE && visibleLastIndex == lastIndex) { //如果是自动加载,可以在这里放置异步加载数据的代码 } } };
因为我的Banner是放在Activity上的 而listview在fragment上所以用广播通知activity
如果当前显示的是listview 第一条 可以显示图片 如果不是 就隐藏图片
让然 这点还不够 还需要activity里的代码配合
int bannerState;//通过广播发送过来的listview显示状态 rivate boolean mIsTitleHide = false; private float lastX = 0; private float lastY = 0; @Override public boolean dispatchTouchEvent(MotionEvent event) { super.dispatchTouchEvent(event); final int action = event.getAction(); float x = event.getX(); float y = event.getY(); switch (action) { case MotionEvent.ACTION_DOWN: lastY = y; lastX = x; return false; case MotionEvent.ACTION_MOVE: float dY = Math.abs(y - lastY); float dX = Math.abs(x - lastX); boolean down = y > lastY ? true : false; lastY = y; lastX = x; if (dX < 8 && dY > 8 && !mIsTitleHide && !down) { AnimationUtil.hide(banner);//使用动画隐藏Banner } else if (dX < 8 && dY > 8 && mIsTitleHide && down && bannerState == 1) { AnimationUtil.show(banner);//使用动画显示Banner } else { return false; } mIsTitleHide = !mIsTitleHide; break; default: return false; } return false; }
最后是我使用的动画代码
public static void hide(final View view) {
ObjectAnimator anim = ObjectAnimator.ofFloat(view, “y”, view.getY(),
view.getY() - view.getHeight());
anim.setDuration(50);
anim.start();
anim.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
} @Override public void onAnimationEnd(Animator animator) { view.setVisibility(View.GONE); } @Override public void onAnimationCancel(Animator animator) { } @Override public void onAnimationRepeat(Animator animator) { } }); } public static void show(final View view) { view.setVisibility(View.VISIBLE); ObjectAnimator anim = ObjectAnimator.ofFloat(view, "y", view.getY(), view.getY() + view.getHeight()); anim.setDuration(200); anim.start(); }
如果你有更好的方法 和实现效果欢迎留言
相关文章推荐
- android ListView向上滑动隐藏标题,下拉显示标题栏
- 滑动listview隐藏和显示顶部布局
- AndroidSwipeLayout的使用(listview,gridview,view中滑动显示隐藏按钮的使用)
- Android学习笔记-实现toolBar跟随ListView滑动显示与隐藏
- ListView滑动隐藏显示ToolBar的实例
- android ListView向上滑动隐藏标题,下拉显示标题栏
- Android View深入学习——实现QQ滑动显示隐藏按钮ListView
- android ListView向上滑动隐藏标题,下拉显示标题栏
- android listview headerview 滑动显示与隐藏标题(记录)
- Android list列表滑动显示隐藏toolbar(ListView)
- SlideExpandableListView滑动显示隐藏面板
- android ListView向上滑动隐藏标题,下拉显示标题栏
- Android:菜单栏Menubar跟随ListView滑动隐藏和显示
- ScrollView中若嵌套有滑动的控件(如:WebView,ListView或GridView),另外该界面中还有其它的控件时,界面不显示最上面控件的问题。
- ListView的item点击显示隐藏的菜单
- [原] XAF ListView显示隐藏Footer菜单
- Android上实现各种风格的隐藏菜单,比如左右滑动菜单、上下滑动显示隐藏菜单
- Andoid - 开发实例(6):动画实例之实现Google+滑动Listview让底部bar隐藏
- ListView动态显示或隐藏FooterView
- android中ExpandableListView点击哪一条那一条显示,而其他条隐藏的实现办法