Android-导航栏特效-新闻类APP(仿iOS版网易新闻今日头条的文字渐变缩放特效)

android 自定义view仿今日头条加载文字变色的效果 不分析了,很简单,直接贴代码:package com.loading; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import a... 阅读详情







一:分析

今天我们要实现这种特效。

用到的开源项目有:master-nineoldandroids-library.jar这个jar包,这个是向下兼容的jar包,包括Android一系列的动画。

首先我们说一下这种 日头条等新闻类APP 的基本实现是ViewPage+Fragment+HorizontalScrollView

我们今天说的就是这个HorizontalScrollView的特效。

实现原理图:



相信大家已经明白了大概

就是:最初时我们 初始化textview  并把选中的和正常的textview 初始化。就是上图中的framelayout中的2个textview 放到集合 HashMap<String, View>()中。用于保持所有textview的状态。

至于代码怎么写呢?!

android系统给我们提供了一个叫PagerSlidingTabStrip的类,在v4包中。我们把Java中考出来放到我们的项目中,修改其中的代码就可以。

我们通过viewpage来控制导航条。把viewpage传到PagerSlidingTabStrip中,并设置监听器,代码如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public void setViewPager(ViewPager pager) {  
  2.         this.pager = pager;  
  3.   
  4.         if (pager.getAdapter() == null) {  
  5.             throw new IllegalStateException(  
  6.                     "ViewPager does not have adapter instance.");  
  7.         }  
  8.   
  9.         pager.setOnPageChangeListener(pageListener);  
  10.   
  11.         notifyDataSetChanged();  
  12.     }  

二、获取用户切换时当前View和切换至的目的View。

ViewPager也需要监听用户的手势,所以肯定提供了某个方法。于是纵观ViewPager的方法,发现了一个叫做 onPageScrolled(int position, float positionOffset, int positionOffsetPixels)的方法~~

没错就是这个方法:在页面滚动时调用~

下面仔细研究下这几个参数:

直接说测试结果:

在非第一页与最后一页时,滑动到下一页,position为当前页位置;滑动到上一页:position为当前页-1

positionOffset 滑动到下一页,[0,1)区间上变化;滑动到上一页:(1,0]区间上变化

positionOffsetPixels这个和positionOffset很像:滑动到下一页,[0,宽度)区间上变化;滑动到上一页:(宽度,0]区间上变化

第一页时:滑动到上一页position=0 ,其他基本为0 ;最后一页滑动到下一页 position为当前页位置,其他两个参数为0


豁然发现,我们需要的步骤的第二步解决了,positionOffset很适合作为,渐变,缩放的控制参数;positionOffsetPixels则可以作为平移等的控制参数。

那么如何获得当前View和目的View呢:

分享几个我的歧途:

1、【错误】我通过getChildAt(position),getChildAt(position+1),getChildAt(position-1)获得滑动时,左右的两个View;乍一看,还真觉得不错~~~在代码写出来,再乍效果也出不来~~错误原因:我们忽略一个特别大的东西,ViewPager的机制,滑动时动态加载和删除View,ViewPager其实只会维持2到3个View,而position的范围基本属于无限~~

2、【错误】我通过getCurrentItem获得当前的位置,然后+1,-1获得后一个或者前一个~~正在窃喜,赶快代码改过来,效果怎么也不对,乱七八糟的~~仔细观察日志,这个getCurrentItem当用户手指离开的屏幕,Page还在动画执行时,就改变了~~难怪~整个滑动过程并不是固定的~~唉,心都碎了~

3、【错误】position在整个滑动的过程中是不变化的,而且ViewPager会保存2个或3个View;那么我考虑,如果是第一页、或者最后一页那么我取getChildAt(0)和getChildAt(1),如果在其他页面则为getChildAt(0),getChildAt(2),然后经过一系列的变化~我想这会总该对了吧,于是我遇到第一问题,第一页的时候,不管左右position都为0,尼玛,这哪个为左View,哪个为右View~~

说了这么多错误,大家可以绕过这些弯路,也能从这些弯路里面看出点什么~

下面说正确的,其实ViewPager在添加一个View或者销毁一个View时,是我们自己的PageAdapter中控制的,于是我们可以在ViewPager里面维系一个HashMap<Position,View>,然后滑动的时候,通过get(position)取出,比如上述效果,始终是右边的View变化,要么从小到大,要么从大到小

那么滑倒下一页:左边的View:map.get(position) ,右边的View : map.get(position+1) . 

那么滑倒上一页:左边的View : map.get(position) , 右边的View : map.get(position+1) , 一样的,因为滑到上一页,position为当前页-1


关键代码:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <pre name="code" class="java">    private class PageListener implements OnPageChangeListener {  
  2.         private int oldPosition = 0;  
  3.   
  4.         @Override  
  5.         public void onPageScrolled(int position, float positionOffset,  
  6.                 int positionOffsetPixels) {  
  7.             currentPosition = position;  
  8.             currentPositionOffset = positionOffset;  
  9.   
  10.             scrollToChild(position, (int) (positionOffset * tabsContainer  
  11.                     .getChildAt(position).getWidth()));  
  12.   
  13.             invalidate();  
  14.   
  15.             if (delegatePageListener != null) {  
  16.                 delegatePageListener.onPageScrolled(position, positionOffset,  
  17.                         positionOffsetPixels);  
  18.             }  
  19.   
  20.             if (mState == State.IDLE && positionOffset > 0) {  
  21.                 oldPage = pager.getCurrentItem();  
  22.                 mState = position == oldPage ? State.GOING_RIGHT  
  23.                         : State.GOING_LEFT;  
  24.             }  
  25.             boolean goingRight = position == oldPage;  
  26.             if (mState == State.GOING_RIGHT && !goingRight)  
  27.                 mState = State.GOING_LEFT;  
  28.             else if (mState == State.GOING_LEFT && goingRight)  
  29.                 mState = State.GOING_RIGHT;  
  30.   
  31.             float effectOffset = isSmall(positionOffset) ? 0 : positionOffset;  
  32.   
  33.             View mLeft = tabsContainer.getChildAt(position);  
  34.             View mRight = tabsContainer.getChildAt(position + 1);  
  35.   
  36.             if (effectOffset == 0) {  
  37.                 mState = State.IDLE;  
  38.             }  
  39.   
  40.             if (mFadeEnabled)  
  41.                 animateFadeScale(mLeft, mRight, effectOffset, position);  
  42.   
  43.         }  
  44.   
  45.         @Override  
  46.         public void onPageScrollStateChanged(int state) {  
  47.             if (state == ViewPager.SCROLL_STATE_IDLE) {  
  48.                 scrollToChild(pager.getCurrentItem(), 0);  
  49.                 mFadeEnabled = true;  
  50.             }  
  51.   
  52.             if (delegatePageListener != null) {  
  53.                 delegatePageListener.onPageScrollStateChanged(state);  
  54.             }  
  55.         }  
  56.   
  57.         @Override  
  58.         public void onPageSelected(int position) {  
  59.             // selectedPosition = position;  
  60.             // updateTabStyles();  
  61.             currentPosition = position;  
  62.   
  63.             // set old view statue  
  64.             ViewHelper.setAlpha(tabViews.get(oldPosition).get("normal"), 1);  
  65.             ViewHelper.setAlpha(tabViews.get(oldPosition).get("selected"), 0);  
  66.             View v_old = tabsContainer.getChildAt(oldPosition);  
  67.             ViewHelper.setPivotX(v_old, v_old.getMeasuredWidth() * 0.5f);  
  68.             ViewHelper.setPivotY(v_old, v_old.getMeasuredHeight() * 0.5f);  
  69.             ViewHelper.setScaleX(v_old, 1f);  
  70.             ViewHelper.setScaleY(v_old, 1f);  
  71.   
  72.             // set new view statue  
  73.             ViewHelper.setAlpha(tabViews.get(position).get("normal"), 0);  
  74.             ViewHelper.setAlpha(tabViews.get(position).get("selected"), 1);  
  75.             View v_new = tabsContainer.getChildAt(position);  
  76.             ViewHelper.setPivotX(v_new, v_new.getMeasuredWidth() * 0.5f);  
  77.             ViewHelper.setPivotY(v_new, v_new.getMeasuredHeight() * 0.5f);  
  78.             ViewHelper.setScaleX(v_new, 1 + ZOOM_MAX);  
  79.             ViewHelper.setScaleY(v_new, 1 + ZOOM_MAX);  
  80.   
  81.             if (delegatePageListener != null) {  
  82.                 delegatePageListener.onPageSelected(position);  
  83.             }  
  84.             // oldPosition = selectedPosition;  
  85.             oldPosition = currentPosition;  
  86.   
  87.         }  
  88.   
  89.     }  


 

可以看到代码:缩放view很关键:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. View v_old = tabsContainer.getChildAt(oldPosition);  
  2.             ViewHelper.setPivotX(v_old, v_old.getMeasuredWidth() * 0.5f);  
  3.             ViewHelper.setPivotY(v_old, v_old.getMeasuredHeight() * 0.5f);  
  4.             ViewHelper.setScaleX(v_old, 1f);  
  5.             ViewHelper.setScaleY(v_old, 1f);  
找到view的中心点即:setPivotX setPivotY 然后对X轴Y轴缩放。1为原始大小。>1放大,<1  且>0 缩小。

关键代码是:onPageScrolled 方法的底2个参数positionOffset 滑动的百分比。

渐变通过animateFadeScale这个方法控制:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. protected void animateFadeScale(View left, View right,  
  2.         float positionOffset, int position) {  
  3.   
  4.     if (mState != State.IDLE) {  
  5.         if (left != null) {  
  6.             ViewHelper.setAlpha(tabViews.get(position).get("normal"),  
  7.                     positionOffset);  
  8.             ViewHelper.setAlpha(tabViews.get(position).get("selected"),  
  9.                     1 - positionOffset);  
  10.   
  11.             float mScale = 1 + ZOOM_MAX - ZOOM_MAX * positionOffset;  
  12.   
  13.             ViewHelper.setPivotX(left, left.getMeasuredWidth() * 0.5f);  
  14.             ViewHelper.setPivotY(left, left.getMeasuredHeight() * 0.5f);  
  15.             ViewHelper.setScaleX(left, mScale);  
  16.             ViewHelper.setScaleY(left, mScale);  
  17.   
  18.         }  
  19.         if (right != null) {  
  20.             ViewHelper.setAlpha(tabViews.get(position + 1).get("normal"),  
  21.                     1 - positionOffset);  
  22.             ViewHelper.setAlpha(tabViews.get(position + 1).get("selected"),  
  23.                     positionOffset);  
  24.   
  25.             float mScale = 1 + ZOOM_MAX * positionOffset;  
  26.   
  27.             ViewHelper.setPivotX(right, right.getMeasuredWidth() * 0.5f);  
  28.             ViewHelper.setPivotY(right, right.getMeasuredHeight() * 0.5f);  
  29.             ViewHelper.setScaleX(right, mScale);  
  30.             ViewHelper.setScaleY(right, mScale);  
  31.   
  32.         }  
  33.     }  
  34. }  



在你activity/引用的地方 中你可以直接设置TAB的颜色大小,正常色,选中色等。EG:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.      * 对PagerSlidingTabStrip的各项属性进行赋值。 
  3.      */  
  4.     private void setTabsValue() {  
  5.         // 设置Tab是自动填充满屏幕的  
  6.         tabs.setShouldExpand(true);  
  7.         // 设置Tab的分割线是透明的  
  8.         tabs.setDividerColor(Color.TRANSPARENT);  
  9.         // 设置Tab底部线的高度  
  10.         tabs.setUnderlineHeight((int) TypedValue.applyDimension(  
  11.                 TypedValue.COMPLEX_UNIT_DIP, 1, dm));  
  12.         // 设置Tab Indicator的高度  
  13.         tabs.setIndicatorHeight((int) TypedValue.applyDimension(  
  14.                 TypedValue.COMPLEX_UNIT_DIP, 4, dm));  
  15.         // 设置Tab标题文字的大小  
  16.         tabs.setTextSize((int) TypedValue.applyDimension(  
  17.                 TypedValue.COMPLEX_UNIT_SP, 16, dm));  
  18.         // 设置Tab Indicator的颜色  
  19.         tabs.setIndicatorColor(Color.parseColor("#45c01a"));  
  20.         // 设置选中Tab文字的颜色 (这是我自定义的一个方法)  
  21.         tabs.setSelectedTextColor(Color.parseColor("#45c01a"));  
  22.         //设置正常Tab文字的颜色 (这是我自定义的一个方法)  
  23.         tabs.setTextColor(Color.parseColor("#C231C7"));  
  24.         // 取消点击Tab时的背景色  
  25.         tabs.setTabBackground(0);  
  26.     }  


源码:

github地址:

https://github.com/ta893115871/PagerSlidingTabStrip 

注意:偷偷的告诉你最好去github地址哦,免费的,不要资源积

分。代码已经没有多余的类了。也可以直接食用依赖库,github上都有说明哦!

不要忘记start哦!!

csdn资源-源代码

源代码

Android-仿IOSQQ底部导航栏效果可自定义多种属性效果 仿IOS、QQ底部导航栏效果,可自定义多种属性效果 立即下载

相关推荐

滑动tab菜单(仿网易新闻)

在一般大家可以下载到的滑动tab(仿网易上)做了优化,点击和超出一屏滑动(优化),拿来改改就能直接移植到项目

仿今日头条的滚动指示器的效果

最近在看今日头条的时候,发现他们的引导的viewpager的指示器跟其他软件有点不同,字体颜色是渐变过去的,所以来模仿了下,效果图如下: 首先,分析上面的动态图,其中两个不同的textview,一个颜色是从左往右变化的,另一个是从右往左变化的。 下面  我们先来分别实现下从左往右变化的TextView和颜色从右往左变化的TextView。

Justh 1749

状态估计【卡尔曼滤波kalman】UKF、EKF、粒子滤波PF学习与研究(Matlab代码实现)

内容概要:本文围绕非线性状态估计中的三种经典滤波算法——无迹卡尔曼滤波(UKF)、扩展卡尔曼滤波(EKF)和粒子滤波(PF)展开系统性学习与研究,重点在于通过Matlab编程实现这些算法的核心流程,并将其应用于实际系统的状态估计问题中。文档不仅详细阐述了各算法的数学原理、适用条件与性能差异,还提供了完整的仿真代码与案例分析,帮助读者深入理解其在非线性、非高斯环境下的表现特性。同时,资源拓展至EKF与神经网络融合训练、多源数据融合等高级应用场景,展现了其在智能控制、无人机导航、电力系统状态估计、目标跟踪等领域的广泛应用价值。; 适合人群:具备一定信号处理、控制理论或状态估计基础的研究生、科研人员及工程技术人员,尤其适用于从事自动化、机器人、导航、电力电子与智能系统等相关方向的研究与开发工作者;; 使用场景及目标:① 掌握UKF、EKF与PF在非线性系统中的建模思路与Matlab实现方法,理解其优缺点与适用边界;② 提升科研仿真能力,能够独立构建状态估计模型并进行算法对比验证;③ 将所学方法应用于如电池SOC估算、无人机姿态估计、传感器融合、故障诊断等实际工程问题中;; 阅读建议:建议结合Matlab动手实践,逐行解读并调试所提供的代码,深入理解算法实现细节;同时可延伸学习文中提及的数据融合、神经网络与滤波器结合等进阶主题,以构建完整的状态估计技术知识体系。

Android自定义控件之RecyclerView打造万能ViewPager TabLayout(仿今日头条Tab滑动、Tab多布局、indicator蠕动、自定义indicator、文字颜色渐变)

Tab均分不滑动(ViewPager、ViewPager2均支持) Tab滑动、 indicator蠕动、多布局(ViewPager、ViewPager2均支持) 根据item个数动态设置Tab均分还是滑动 Tab文字颜色渐变(ViewPager、ViewPager2均支持) 自定义Indicator如三角形(ViewPager、ViewPager2均支持) ViewPager双层嵌套(建议不要使用ViewPager2进行双层嵌套,ViewPager2嵌套滑动冲突几乎无法处理,贼鸡儿坑) 仿微信主页Tab

奋斗的IT青年 7153

Chronos:学习时间序列的大语言模型(论文解读)

《Chronos:学习时间序列的大语言模型》论文翻译

qq_20144897的博客 9053

BERTopic安装指南:hdbscan依赖问题全解析(附解决方案)

本文详细解析了安装BERTopic时常见的hdbscan依赖报错问题,深入剖析了C++编译环境缺失、Python版本兼容性以及包管理渠道混用三大核心原因。针对Windows、macOS和Linux不同系统,提供了创建虚拟环境、使用conda安装预编译包、安装C++编译工具等具体解决方案,帮助用户顺利安装BERTopic并开始文本主题建模实践。

weixin_29061041的博客 213

android bottombar动画,Android_Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果,BottomBar   BottomB...

Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果BottomBarBottomBar是Github上的一个开源框架,因为从1.3.3开始不支持fragments了,要自己配置,弄了很久,不管是app的fragment还是V4 的程序总是总是闪退。于是就用这种方式实现了,效果还不错。github有详细说明,多余的就不说了。这个roughike是这个...

weixin_36008052的博客 310

Cursor集成Claude 4.6免费版:本地IDE合规调用指南

大语言模型编程助手(LLM Copilot)已成为现代开发标配,其核心能力依赖于上下文理解、代码推理与结构化输出等关键技术原理。Anthropic官方提供的Claude系列模型,尤其Claude 4.6,凭借200K超长上下文、tool use函数调用和严格可控的API设计,在工程实践中展现出显著技术价值。该能力可无缝嵌入本地IDE环境,支撑代码解释、跨文件分析、单元测试生成等高频开发场景。本文聚焦Cursor这一开源可审计IDE,详解如何合规复用Anthropic免费tier接口(/v1/messages

weixin_34095889的博客 537

Android 自定义TextView实现文字渐变动画

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34343000的博客 936

Axure RP 10表单数据提交制作

本文介绍了如何使用Axure RP 10实现表单数据提交。

Peppaaa的博客 990

YOLO11多个点组合创新:GC10-DET缺陷检测 | DCNv4结合SPPF+11Detect创新性结合

DCNv4结合SPPF+11Detect创新性结合,原始mAP50为0.633 提升至0.651

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1290

android 自定义高仿今日头条tablayout,滑动渐变字体颜色还有字体大小

今天给大家介绍一个写的比较好的tablayout,各种样式都有,可以自己定制 https://github.com/hackware1993/MagicIndicator

qq_28674511的博客 2403

springboot+vue项目基础开发(12)vue项目的搭建

在src目录下新建 api,utils,views文件夹。删除componets目录下自动生成的所有文件。在utils文件夹下创建request.js。启动项目,记得是要在管理员下启动。

m0_58498702的博客 153

android bottombar动画,BottomBarLayout——方便快捷地实现底部导航栏

轻量级的底部导航栏目前市场上的App,几乎都有底部页签导航栏,所以我们在开发的时候经常需要用到这个,虽然github上有不少已经封装好的底部导航栏的工具,例如bottombar,alphaIndicator(仿微信滑动渐变底部控件)等,但是这些控件由于功能太多,而且也没有给予详细的介绍文档,所以用起来不是特别容易,有时候我们仅仅只是想要一个简简单单的底部导航,但是又不想去自己在布局中搞一个个Lin...

weixin_32098191的博客 535

低照度与极端天气环境中的YOLOv8优化:CPA-Enhancer网络的应用与分析

为了克服上述问题,本文提出了一种名为的网络改进方案。CPA-Enhancer通过引入链式思考机制和改进的注意力机制,有效地提升了YOLOv8在低照度和复杂天气下的表现。本文提出了针对低照度和恶劣天气条件下目标检测的YOLOv8改进方案——CPA-Enhancer链式思考网络。通过引入低照度图像增强和多尺度特征融合技术,CPA-Enhancer显著提高了YOLOv8在低光照、雾霾、雨雪等环境下的检测性能。实验结果表明,CPA-Enhancer相较于原始YOLOv8,在多个指标上都有显著的提升,尤其是在mAP。

博客 1564

(付费请教,防遗忘记录)为什么EDEM bondV1 V2添加后还是没有胶结?????

最近用到了EDEM的胶结功能,在添加了bond V1和V2后,我发现无论颗粒半径设置为多少,接触半径设置为多少,胶结键的参数设置为多少,bond generated数量均为0!!!在后处理中bond中的力也通通为0!!我跟我的同门百思不得其解!!!!最终付费请教了一个大牛,解决了这个问题!!!!答案在文末

zheaa的博客 3101

android 仿今日头条_Android RecyclerView打造万能ViewPager TabLayout(仿今日头条)

文章目录GitHub:https://github.com/AnJiaoDe/TabLayoutNiubility该轮子特异功能如下:使用方法注意:该轮子适用于androidx中的ViewPager2和ViewPager注意:如果轮子死活下载不下来,说明maven地址有毛病,你需要找到jitpack的官网首页,查看最新的官网地址注意:记得去gayhub查看最新版本,最新版本最niubility详细...

weixin_40002846的博客 523

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

今日头条文字渐变特效项目实战(一),一文带你搞懂Android多线程Handler

外链图片转存中…(img-ds9Mii1F-1711004734399)]

m0_60567881的博客 570

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

RecyclerView+OKHttp单例模式+拦截器+BottomBar+属性动画+自定义标题栏+配合MVP模式

依赖 implementation 'com.google.code.gson:gson:2.8.5' implementation 'com.github.bumptech.glide:glide:4.8.0' implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com...

weixin_43836458的博客 311

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android滑动ScrollView时使导航栏停留的效果(仿ios的tableview分区)

首先,我们来看下效果图,如下:   让我们来分析一下这个图,这是一个scrollview,有4个条目,当我们向上滑动的时候,如果条目2滑到顶端,会把 条目1顶上去,然后条目2停留,等待条目3上来,之后条目3会把条目2顶上去,然后停留,后面同理。 那么,这个动态的怎么来实现呢?停留的导航栏是什么呢? 其实,导航栏是一个浮在scrollView上面的一个textView

AA_chao的博客 1656

android canvas_Android仿IOS11 控制中心进度条

这篇文章我们就用简单的自定义View实现类似iOS11的控制中心里边出现的很新颖的进度条。先看一下目标效果图,以及最后的实现效果:自定义属性分析名字释义progressMax最大值progressValue进度iconSrc图标bgColor背景颜色progressColor进度颜色progressOrientation方向rectRadius圆角弧度iconPaddingicon内间距...

weixin_39873191的博客 383

Android上实现仿IOS的导航栏TitleBar

一个简单易用的导航栏TitleBar,可以轻松实现IOS导航栏的各种效果

一刀三段的专栏 8505

Android之仿今日头条顶部导航栏效果

随着时间的推移现在的软件要求显示的内容越来越多,所以要在小的屏幕上能够更好的显示更多的内容,首先我们会想到底部菜单栏,但是有时候像今日头条新闻客户端要显示的内容太多,而且又想在主界面全部显示出来,所以有加了顶部导航栏。 今日头条顶部导航栏区域的主要部分是一个导航菜单。导航菜单是一组标签的集合,在新闻客户端中,每个标签标示一个新闻类别,对应下面ViewPager控件的一个分页面。当用户在Vie

宝爷的专栏 3162

仿今日头条亮度调节,字体调节(自定义视图),很好的滑动选择器

菜鸟刚起步的博客!希望会帮助到大家! 滑动选择器参照github:https://github.com/ZhaoKaiQiang/SlideSelectView 通过自己的修改,最后的跟网易效果差不多 具体代码实现: main方法: package com.xuxh.slideselectview; import android.app.Activity; impo

xuxh_6的博客 2792
上一篇: AppWidget手把手教你(一步步很明白)
下一篇: 解密所有APP运行过程中的内部逻辑
Manaasdfasdf
博客等级 码龄11年 131粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值