仿淘宝商品详情页顶部banner和沉浸式效果
这边使用第三方沉浸式库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和沉浸式效果相关推荐
- 仿淘宝商品详情页顶部nav屏幕滑动出现-商品/详情/评价/分享
项目开发实录 将其简化为一个demo方便后续使用 简化淘宝顶部的淡入淡出并将其修改为两个不同盒子之间的切换,毕竟实际项目实际操作嘛. 下面的代码块为简略版的demo,直接复制粘贴即可实现效果(移动端喔 ...
- Android开发之仿淘宝商品详情页
看到有人在问如何实现淘宝商品详情页效果,手痒了就撸了一个,献上效果图 大致梳理一下思路,这里不提供源码 状态栏透明使用开源库StatusBarCompat,为了兼容手机4.4 dependencies ...
- Android 仿淘宝商品详情页下拉足迹Demo
DropDownMultiPager 仿淘宝等商品详情页下拉足迹效果SimpleDemo 可colne之后看MainActivity的调用,方便二次开发 依赖 compile 'com.nineold ...
- 仿淘宝商品详情页图片滑动并且数字也跟着变化
今天遇到需求需要做个淘宝那样的商品详情页如图(这里只差放图片了)支持移动端,当然用的是swiper.js支持左右滑动 上代码 html代码 <div class="swiper-con ...
- 仿淘宝商品详情页TabLayout+ListView
第一次写博客,我是一名Android的小码农写代码也有三四年了.有点好玩的跟大家分享一下 项目对商品详情页改版有新需求.顶部是一个渐变的Title包括"宝贝","详情&q ...
- 【商城开发三】Android 仿淘宝商品详情页下拉足迹修改版
开发商城的快有半个月了,需要做到详情页下拉足迹的效果,网上找了找没找到,找到一个差不多还有点问题,然后在基础上进行了二次开发 感谢http://blog.csdn.net/yaphetzhao/art ...
- 仿淘宝商品详情页中(继续拖动到图文详情)
参考文章http://www.jb51.net/article/91858.htm 核心view 有2个 一个是自定义的ViewGroup 一个是自定义的ScrollView 首先是自定义的Scrol ...
- 仿淘宝商品详情页[带有视频和图片的轮播功能]
因为工作需求的原因,自己写了一个demo,既实现了功能,又能与大家分享,很高兴!Demo已上传GitHub,https://github.com/xinniangdeweidao/CloneTaoba ...
- 自定义viewGroup防淘宝商品详情页
解决在顶部.底部还可以拖动的问题if (child==fragment2){if (top<0){//让fragment2底部不能上拉 显示viewGroup的背景色lastTop = 0;}} ...
最新文章
- 敏捷开发中的故事点到底是什么?如何预估故事点?
- 四、双向链表的操作分析和代码实现
- curl用法:获取网站的header头及状态码
- Z-Stack - Modification of Zigbee Device Object for better network access management
- C++ 对二维数组排序 升序 降序
- SAP UI5 事件通知技术的实现之Eventbus.subscribe
- wumpus java_人工智能经典问题The Wumpus World-简明窗体小游戏
- FPGA设计的常用思想与技巧(转)
- mysql or优化_MySQL 语句优化
- Windows下基于python3使用word2vec训练中文维基百科语料资料汇总
- C# 实现系统关机、注销、重启、休眠、挂起
- 我的编程学习日志(9)--交换A,B值得方法(相加,异或,swap函数)
- 消防信号二总线有没电压_消防的电源总线和二总线的区别,二总线是不是信号线......
- 使用XMAPP启动MySQL出现Error MySQL shutdown unexpectedly 的解决办法
- linux用户态切换到内核态方法
- pion/ion搭建
- 苹果删除照片不释放内存_手机内存不足又卡顿,别瞎清理,删除这些文件夹,轻松释放几个G!...
- 服务器上的服务一直自动关闭,关于服务器老是自动关闭
- python 基于itchat详解微信防撤回程序
- 客制化 GH60 XD60 像 Poker 一样的 60% 机械键盘 (2) 采购以及组装