热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android仿半糖app首页UIMaterialDesign的使用

半糖appUI效果半糖.gif需求1toolbar处随上下滑动事件的变化2向下滑动的时候,tablayout不会消失3左右滑动可切换fragment,点击也可切换fragment4
半糖appUI效果

《Android 仿半糖app首页UI Material Design的使用》 半糖.gif

需求

1 toolbar处随上下滑动事件的变化
2 向下滑动的时候,tablayout不会消失
3 左右滑动可切换fragment,点击也可切换fragment
4 banner的自动轮播及手动变换(这个点不讲了,网上有很多开源库甚至代码整理。)

思路及分析

0、 Material Design的UI真的很炫,对这个还不是太熟悉,后续要努力。
1 、标题栏处向上滑动,toolbar会从透明底渐变成白底,同时布局也会改变,细致观察,在渐变过程中两种布局都出现了,所以这里应该市同时存在两个toolbar,通过滑动事件的监听渐变透明到消失或显示
2、上滑到底的时候,banner会消失,toobar占据那个位置,同时tablayout也会置顶,不会随着banner的消失而消失。所以banner、Toolbar、以及tablayou都应该在AppBarLayout里面,同时有收缩banner的情况,所以用到CollapsingToolbarLayout
3、底下content部分的话,就是简单的tablayout+viewpager+fragment的处理,这个一般不难
4、viewpager是没有上下滑动的功能的,viewpager内部布局放在fragment里面处理了,所以我这里将viewpager放在一个NestedScrollView里面了
5、准备over

no bb,just show code



xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:fitsSystemWindows="true">


android:id="@+id/appbarlayout"
android:background="@android:color/transparent"
android:layout_
android:layout_>
android:id="@+id/ctb"
android:layout_
android:layout_
app:cOntentScrim="@android:color/white"
app:layout_scrollFlags="scroll|exitUntilCollapsed">

android:id="@+id/banner"
android:visibility="visible"
android:layout_
android:layout_ />

android:id="@+id/toolbar_default"
app:layout_collapseMode="pin"
android:layout_
android:layout_
android:background="@android:color/transparent" >
android:id="@+id/ll_default_tool"
android:orientation="horizontal"
android:layout_
android:layout_>
android:id="@+id/iv_default_left"
android:background="@mipmap/ic_menu"
android:layout_
android:layout_ />
android:layout_weight="1"
android:layout_
android:layout_/>
android:id="@+id/iv_default_right"
android:background="@mipmap/ic_settings"
android:layout_
android:layout_ />



android:visibility="gone"
android:id="@+id/toolbar_nono"
app:layout_collapseMode="pin"
android:layout_
android:layout_
android:background="@android:color/white" >
android:gravity="center_vertical"
android:orientation="horizontal"
android:layout_
android:layout_>
android:id="@+id/et_nono_left"
android:hint="搜索值得买的好物"
android:layout_weight="1"
android:background="@android:color/white"
android:layout_
android:layout_ />
android:id="@+id/iv_nono_right"
android:background="@mipmap/ic_launcher"
android:layout_
android:layout_ />




android:id="@+id/tl_main_tabtop"
android:layout_
android:layout_
android:background="@android:color/white"
app:tabSelectedTextColor="@color/colorAccent" />


android:id="@+id/nestedScrollView"
android:layout_
android:layout_
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
android:layout_
android:layout_
android:orientation="vertical">
android:id="@+id/vp_main_page"
android:layout_
android:layout_
android:layout_weight="1"
android:background="@android:color/white" />



上面是布局,剩下的就是java代码,都挺简单的,唯一需要注意的是,我们要根据上下滑动的状态对toolbar进行显示消失替换等一系列的动作,这个怎么办呢?用到AppBarLayout的addOnOffsetChangedListener,这个可以监听到偏移值(?是这么叫的吗?),可以获取到你滑动的程度。

appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
//通过vertical的偏移值除以totalScrollRange来获取到百分比
float progress = (float) (((int) (Math.abs(verticalOffset) / (appBarLayout.getTotalScrollRange()*0.01)))*0.01);
if (verticalOffset == 0) {
// 展开状态 progress为0,展开状态的toolbar可见
toolbar_default.setVisibility(View.VISIBLE);
toolbar_nono.setVisibility(View.GONE);
toolbar_default.getBackground().setAlpha(255);
iv_defalut_left.getBackground().setAlpha(255);
iv_default_right.getBackground().setAlpha(255);
toolbar_nono.getBackground().setAlpha(255);
} else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) {
//折叠状态 progress为1,折叠状态的toolbar可见
toolbar_default.setVisibility(View.GONE);
toolbar_nono.setVisibility(View.VISIBLE);
toolbar_default.getBackground().setAlpha(255);
toolbar_nono.getBackground().setAlpha(255);
et_nono_left.getBackground().setAlpha(255);
iv_nono_right.getBackground().setAlpha(255);
} else {
//中间状态,两个toolbar是重叠在一起的,根据是从折叠到展开,还是从展开到折叠,同时加上进度progress确定两个toolbar的透明比
if(toolbar_nono.getVisibility() == View.GONE){// 折叠状态的toolbar不可见,则是从展开到折叠变化
flag_defaulttOno= true;
}else if(toolbar_default.getVisibility() == View.GONE){// 展开状态的toolbar不可见,则是从折叠到展开变化,为什么?因为只有到0的时候可见性才会变成gone,其他都是可见或改变透明度。
flag_defaulttOno= false;
}// 以上两种情况都不是的话,则不需要改变flag_defaluttono的值
toolbar_default.setVisibility(View.VISIBLE);
toolbar_nono.setVisibility(View.VISIBLE);//
if(flag_defaulttono){ // 0到1变换
toolbar_default.getBackground().setAlpha((int) ((1-progress) * 255));
iv_defalut_left.getBackground().setAlpha((int) ((1-progress) * 255));
iv_default_right.getBackground().setAlpha((int) ((1-progress) * 255));
toolbar_nono.getBackground().setAlpha((int) ( progress* 255));
et_nono_left.getBackground().setAlpha((int) ( progress* 255));
iv_nono_right.getBackground().setAlpha((int) ( progress* 255));
}else{
toolbar_default.getBackground().setAlpha((int) (progress * 255));
iv_defalut_left.getBackground().setAlpha((int) (progress * 255));
iv_default_right.getBackground().setAlpha((int) (progress * 255));
toolbar_nono.getBackground().setAlpha((int) ((1-progress) * 255));
et_nono_left.getBackground().setAlpha((int) ((1-progress) * 255));
iv_nono_right.getBackground().setAlpha((int) ((1-progress) * 255));
}
}
}
});

剩下的就是banner啊,viewpager+tablayout等那些的,应该大部分都会用,我就不贴上来了。
代码已经放到了gitHub上,有兴趣的可以去瞅瞅,多多提意见,谢谢!

仿制的UI效果图

《Android 仿半糖app首页UI Material Design的使用》 仿半糖.gif

后续

后面还是会继续完善这个仿半糖的app吧,还有底部recyclerView的刷新后续可以添加进去,还有UI什么的。
and 源码有放在github(https://github.com/mLiXin/MudoBantanUI)上,大家有兴趣的,可以瞅瞅源码,中间能优化的地方肯定还有很多,我对Material Design的掌握还不是很好,后续会继续多多学习
and bug肯定有,各位多多提意见了
and over,thx _


推荐阅读
  • 四、连接屏幕流各位读者好!我们已经到了应用开发的一个重要阶段——连接屏幕。如您所知,我们在上一章 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在一对一直播源码使用过程中,有时会出现软键盘切换闪屏问题,就是当切换表情的时候屏幕会跳动,因此要对一对一直播源码表情面板无缝切换进行优化。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 这两天用到了ListView,写下遇到的一些问题。首先是ListView本身与子控件的焦点问题,比如我这里子控件用到了Button,在需要ListView中的根布局属性上加上下面的这一个属性:and ... [详细]
  • 在最近的一系列文章,对midipadAPP,有一个关于一个radialgradiant渲染每个padview利用的探讨,对审美的原因&#x ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 2021年最详细的Android屏幕适配方案汇总
    1Android屏幕适配的度量单位和相关概念建议在阅读本文章之前,可以先阅读快乐李同学写的文章《Android屏幕适配的度量单位和相关概念》,这篇文章 ... [详细]
  • 本文实例讲述了Android编程实现读取工程中的txt文件功能。分享给大家供大家参考,具体如下:1.众所周知,Android的res文件夹 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 在开发app时,使用了butterknife后,在androidStudio打包apk时可能会遇到报错。为了解决这个问题,可以通过打开proguard-rules.pro文件进行代码混淆来解决。本文介绍了具体的混淆代码和方法。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 涉及的知识点-ViewGroup的测量与布局-View的测量与布局-滑动冲突的处理-VelocityTracker滑动速率跟踪-Scroller实现弹性滑动-屏幕宽高的获取等实现步 ... [详细]
author-avatar
祖朝伯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有