这边使用第三方沉浸式库https://github.com/gyf-dev/ImmersionBar 使用自己去研究

一、沉浸式效果

主要是看滑动过程中toolBar的透明度变化

布局如下:

<android.support.design.widget.CoordinatorLayoutandroid:id="@+id/coordinator"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.design.widget.AppBarLayoutandroid:id="@+id/appbar"android:layout_width="match_parent"android:layout_height="wrap_content"android:theme="@style/AppTheme.AppBarOverlay"><android.support.design.widget.CollapsingToolbarLayoutandroid:id="@+id/collapsing_toolbar"android:layout_width="match_parent"android:layout_height="wrap_content"app:contentScrim="?attr/colorPrimary"app:expandedTitleMarginEnd="@dimen/size_titlebar"app:expandedTitleMarginStart="20dp"app:layout_scrollFlags="scroll|exitUntilCollapsed">               <android.support.v7.widget.Toolbarandroid:id="@+id/toolBar"android:layout_width="match_parent"android:layout_height="@dimen/size_titlebar"app:contentInsetStart="0dp"app:layout_collapseMode="pin">
            </android.support.v7.widget.Toolbar></android.support.design.widget.CollapsingToolbarLayout></android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>

设置状态栏为透明:

getmImmersionBar().titleBar(binding.toolBar, false)//解决状态栏和布局重叠问题.transparentBar().init();

重点是监听appbar的滑动:

binding.appbar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {@Overridepublic void onOffsetChanged(AppBarLayout appBarLayout, int i) {int scroll = Math.abs(i);int max = binding.banner.getHeight() - binding.toolBar.getHeight();//设置滑动最大高度,超出后toolBar都设置不透明if (scroll < max) {float alpha = (float) scroll / max;if (alpha > 0.5f) {ImmersionBar.with(CourdeDetailSlideActivity.this).statusBarDarkFont(true)//状态栏字体黑色.addViewSupportTransformColor(binding.toolBar, R.color.white)//设置支持view变色.barAlpha(alpha).init();binding.icBack.setImageResource(R.mipmap.icon_back_black);//返回按钮改成黑色【我这边背景色是白色,如果不是白色可不改变颜色】binding.barTitle.setTextColor(getResources().getColor(R.color.text_3));//标题字体改成黑色} else {ImmersionBar.with(CourdeDetailSlideActivity.this).statusBarDarkFont(false)//状态栏字体白色.addViewSupportTransformColor(binding.toolBar, R.color.white).barAlpha(alpha).init();binding.icBack.setImageResource(R.mipmap.nav_back_white);binding.barTitle.setTextColor(getResources().getColor(R.color.white));}} else {GSYVideoManager.onPause();//滑动超出banner显示区域,视频播放暂停ImmersionBar.with(CourdeDetailSlideActivity.this).statusBarDarkFont(true).addViewSupportTransformColor(binding.toolBar, R.color.white).barAlpha(1.0f).init();binding.icBack.setImageResource(R.mipmap.icon_back_black);binding.barTitle.setTextColor(getResources().getColor(R.color.text_3));}}
});

二、banner效果

这边我使用RecyclerView来实现多布局效果

MultiTypeSupport multiTypeSupport = new MultiTypeSupport() {@Overridepublic int getLayoutId(Object item, int position) {if (mTopLists.get(position).getShowType() == 1) {//根据显示类型判断是视频还是图片return R.layout.course_detail_top_video;} else {return R.layout.course_detail_top_image;}}
};
if (mTopAdapter == null) {mTopAdapter = new CommonRecyclerAdapter<CourseTopVideoImage>(this, mTopLists, multiTypeSupport) {@Overridepublic void convert(ViewHolder holder, CourseTopVideoImage item, int position) {if (item.getShowType() == 1) {//视频StandardGSYVideoPlayer gsyVideoPlayer = holder.getView(R.id.video_item_player);//增加封面ImageView imageView = new ImageView(App.getContext());imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);ImageUtils.newInstance().load(item.getImagePath(), imageView);if (imageView.getParent() != null) {ViewGroup viewGroup = (ViewGroup) imageView.getParent();viewGroup.removeView(imageView);}GSYVideoOptionBuilder gsyVideoOptionBuilder = new GSYVideoOptionBuilder();gsyVideoOptionBuilder.setIsTouchWiget(false).setThumbImageView(imageView).setUrl(item.getPath()).setVideoTitle("").setCacheWithPlay(false).setRotateViewAuto(true).setLockLand(true).setPlayTag("").setNeedShowWifiTip(false).setShowFullAnimation(true).setNeedLockFull(true).setPlayPosition(position).setVideoAllCallBack(new GSYSampleCallBack() {@Overridepublic void onPrepared(String url, Object... objects) {super.onPrepared(url, objects);if (!gsyVideoPlayer.isIfCurrentIsFullscreen()) {//静音// GSYVideoManager.instance().setNeedMute(true);}}@Overridepublic void onQuitFullscreen(String url, Object... objects) {super.onQuitFullscreen(url, objects);//全屏不静音// GSYVideoManager.instance().setNeedMute(true);}@Overridepublic void onEnterFullscreen(String url, Object... objects) {super.onEnterFullscreen(url, objects);// GSYVideoManager.instance().setNeedMute(false);}}).build(gsyVideoPlayer);//增加titlegsyVideoPlayer.getTitleTextView().setVisibility(View.GONE);//设置返回键gsyVideoPlayer.getBackButton().setVisibility(View.GONE);//设置全屏按键功能gsyVideoPlayer.getFullscreenButton().setVisibility(View.GONE);} else {//图片ImageView imageView = holder.getView(R.id.imageView);ImageUtils.newInstance().load(item.getImagePath(), imageView);}}};
}
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);//设置滑动方向为横向滑动
PagerSnapHelper snapHelper = new PagerSnapHelper();//设置一次只能滑动一页,不能快速滑动
binding.banner.setOnFlingListener(null);
snapHelper.attachToRecyclerView(binding.banner);
binding.banner.setLayoutManager(linearLayoutManager);
binding.banner.setAdapter(mTopAdapter);binding.banner.addOnScrollListener(new RecyclerView.OnScrollListener() {int firstVisibleItem, lastVisibleItem;@Overridepublic void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {super.onScrollStateChanged(recyclerView, newState);}@Overridepublic void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {super.onScrolled(recyclerView, dx, dy);firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition();lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();//大于0说明有播放if (GSYVideoManager.instance().getPlayPosition() >= 0) {//当前播放的位置int position = GSYVideoManager.instance().getPlayPosition();//对应的播放列表TAGif (position < firstVisibleItem || position > lastVisibleItem) {GSYVideoManager.onPause();//切换停止播放}}}
});

仿淘宝商品详情页顶部banner和沉浸式效果相关推荐

  1. 仿淘宝商品详情页顶部nav屏幕滑动出现-商品/详情/评价/分享

    项目开发实录 将其简化为一个demo方便后续使用 简化淘宝顶部的淡入淡出并将其修改为两个不同盒子之间的切换,毕竟实际项目实际操作嘛. 下面的代码块为简略版的demo,直接复制粘贴即可实现效果(移动端喔 ...

  2. Android开发之仿淘宝商品详情页

    看到有人在问如何实现淘宝商品详情页效果,手痒了就撸了一个,献上效果图 大致梳理一下思路,这里不提供源码 状态栏透明使用开源库StatusBarCompat,为了兼容手机4.4 dependencies ...

  3. Android 仿淘宝商品详情页下拉足迹Demo

    DropDownMultiPager 仿淘宝等商品详情页下拉足迹效果SimpleDemo 可colne之后看MainActivity的调用,方便二次开发 依赖 compile 'com.nineold ...

  4. 仿淘宝商品详情页图片滑动并且数字也跟着变化

    今天遇到需求需要做个淘宝那样的商品详情页如图(这里只差放图片了)支持移动端,当然用的是swiper.js支持左右滑动 上代码 html代码 <div class="swiper-con ...

  5. 仿淘宝商品详情页TabLayout+ListView

    第一次写博客,我是一名Android的小码农写代码也有三四年了.有点好玩的跟大家分享一下 项目对商品详情页改版有新需求.顶部是一个渐变的Title包括"宝贝","详情&q ...

  6. 【商城开发三】Android 仿淘宝商品详情页下拉足迹修改版

    开发商城的快有半个月了,需要做到详情页下拉足迹的效果,网上找了找没找到,找到一个差不多还有点问题,然后在基础上进行了二次开发 感谢http://blog.csdn.net/yaphetzhao/art ...

  7. 仿淘宝商品详情页中(继续拖动到图文详情)

    参考文章http://www.jb51.net/article/91858.htm 核心view 有2个 一个是自定义的ViewGroup 一个是自定义的ScrollView 首先是自定义的Scrol ...

  8. 仿淘宝商品详情页[带有视频和图片的轮播功能]

    因为工作需求的原因,自己写了一个demo,既实现了功能,又能与大家分享,很高兴!Demo已上传GitHub,https://github.com/xinniangdeweidao/CloneTaoba ...

  9. 自定义viewGroup防淘宝商品详情页

    解决在顶部.底部还可以拖动的问题if (child==fragment2){if (top<0){//让fragment2底部不能上拉 显示viewGroup的背景色lastTop = 0;}} ...

最新文章

  1. 敏捷开发中的故事点到底是什么?如何预估故事点?
  2. 四、双向链表的操作分析和代码实现
  3. curl用法:获取网站的header头及状态码
  4. Z-Stack - Modification of Zigbee Device Object for better network access management
  5. C++ 对二维数组排序 升序 降序
  6. SAP UI5 事件通知技术的实现之Eventbus.subscribe
  7. wumpus java_人工智能经典问题The Wumpus World-简明窗体小游戏
  8. FPGA设计的常用思想与技巧(转)
  9. mysql or优化_MySQL 语句优化
  10. Windows下基于python3使用word2vec训练中文维基百科语料资料汇总
  11. C# 实现系统关机、注销、重启、休眠、挂起
  12. 我的编程学习日志(9)--交换A,B值得方法(相加,异或,swap函数)
  13. 消防信号二总线有没电压_消防的电源总线和二总线的区别,二总线是不是信号线......
  14. 使用XMAPP启动MySQL出现Error MySQL shutdown unexpectedly 的解决办法
  15. linux用户态切换到内核态方法
  16. pion/ion搭建
  17. 苹果删除照片不释放内存_手机内存不足又卡顿,别瞎清理,删除这些文件夹,轻松释放几个G!...
  18. 服务器上的服务一直自动关闭,关于服务器老是自动关闭
  19. python 基于itchat详解微信防撤回程序
  20. 客制化 GH60 XD60 像 Poker 一样的 60% 机械键盘 (2) 采购以及组装

热门文章

  1. 【蓝桥杯真题】2020蓝桥杯真题-跑步锻炼
  2. 2020第十一届蓝桥杯省赛真题:跑步锻炼
  3. socketio mysql_socketio server推送
  4. wampserver中mysql密码_WampServer修改MySQL密码
  5. 【数据结构】循环链表
  6. 车联网T-BOX小结
  7. FTP口令受到穷举法暴力***后的蛛丝马迹
  8. less面试_资深面试官告诉你:面试时千万不要说这七句话
  9. 小米用USB上网成功
  10. java之app自动化(解决搜狗输入法无法进行隐藏的问题)