Android之仿网易V3.5新特性

为什么80%的码农都做不了架构师?>>>   hot3.png

最近,网易新闻更新到V3.5了,给我印象最深的是第一次进应用时显示新特性的ViewPager变成垂直滑动了。于是,小小的模仿了一下,我们来看看效果:

本文源码下载地址:http://download.csdn.net/detail/weidi1989/5771921


   


   


其实这是一个很简单的代码,一个自定义的ViewPager就可以搞定,引用自JakeWharton的一个开源项目:点击打开链接。

这个项目实际上是在ViewPager的基础上,做了一个扩展,加入了对上下方向滑动的支持,正如项目的名字,使用该项目,可以灵活的改变viewpager的方向,而且仅用一个简单的属性设置就可以做到,我只对该项目提供的例子做了一些简单的改动,就做到了网易新闻这个引导页的效果。

项目中最主要的部分:

DirectionalViewPager:直接继承自ViewPager,主要在onInterceptTouchEvent()和onTouchEvent()里面加入了对于垂直方向滑动的支持.并提供了setOrientation()这个方法,

我们可以同过此方法,直接设置ViewPager的滑动效果,垂直或者是水平

VerticalViewPagerCompat:提供了设置DataSetObserver的方法:setDataSetObserver()

接下来看具体使用的部分:MainActivity

package com.way.newversion;import android.os.Bundle;
import android.support.v4.app.FragmentActivity;import com.way.directionalviewpager.DirectionalViewPager;public class MainActivity extends FragmentActivity {private DirectionalViewPager mDirectionalViewPager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// Set up the pagermDirectionalViewPager = (DirectionalViewPager) findViewById(R.id.pager);mDirectionalViewPager.setAdapter(new TestFragmentAdapter(getSupportFragmentManager()));mDirectionalViewPager.setOrientation(DirectionalViewPager.VERTICAL);//设置方向垂直即可。}}

实际应用中,我们直接用DirectionalViewPager代替ViewPager,再设置其滑动方向即可,既可以水平,也可以垂直,一个setOritation直接搞定.

看到了吧,实现上下滑动的效果就这么简单.在此不得不致敬JakeWharton这位大牛在开源项目上的贡献,让我们这些开发者受益颇深..



例子中其他部分,我只替换了资源图片:

我们每个界面都是使用的Fragment,由于通用以及简洁性,我这里就只使用一个TestFragment:

package com.way.newversion;import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;public class TestFragment extends Fragment {private static final String KEY_CONTENT = "TestFragment:Content";private static final String KEY_ISLASTPIC = "TestFragment:IsLastPic";private int mContent;private boolean mIsLastPic;public static TestFragment newInstance(int content, boolean isLastPic) {TestFragment fragment = new TestFragment();fragment.mContent = content;fragment.mIsLastPic = isLastPic;return fragment;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {if ((savedInstanceState != null)&& savedInstanceState.containsKey(KEY_CONTENT)) {mContent = savedInstanceState.getInt(KEY_CONTENT);mIsLastPic = savedInstanceState.getBoolean(KEY_ISLASTPIC);}View root = inflater.inflate(R.layout.fragment_layout, container, false);ImageView iv = (ImageView) root.findViewById(R.id.iv);iv.setImageResource(mContent);Button btn = (Button) root.findViewById(R.id.btn);if (mIsLastPic)btn.setVisibility(View.VISIBLE);elsebtn.setVisibility(View.GONE);return root;}@Overridepublic void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putInt(KEY_CONTENT, mContent);outState.putBoolean(KEY_ISLASTPIC, mIsLastPic);}
}

接下来是所有fragment的Adapter:

package com.way.newversion;import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;class TestFragmentAdapter extends FragmentPagerAdapter {protected static final int[] CONTENT = new int[] {R.drawable.biz_ad_new_version1_img0,R.drawable.biz_ad_new_version1_img1,R.drawable.biz_ad_new_version1_img2,R.drawable.biz_ad_new_version1_img3 };public TestFragmentAdapter(FragmentManager fm) {super(fm);}@Overridepublic Fragment getItem(int position) {boolean isLastPic = false;if (position == CONTENT.length - 1)isLastPic = true;return TestFragment.newInstance(CONTENT[position], isLastPic);}@Overridepublic int getCount() {return CONTENT.length;}
}


好了,大概就是这样,有需要的朋友可以下载代码看看,很简单的,最后注意一下,我这里并未实现背景跟随滑动,加上之后会更加栩栩如生,这个就留给大家了。



转载于:https://my.oschina.net/cjkall/blog/195803

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android_内存泄露

2019独角兽企业重金招聘Python工程师标准>>> 1.资源对象没关闭造成的内存泄漏 描述: 资源性对象比如(Cursor,File文件等)往往都用了一些缓冲,我们在不使用的时候,应该及时关闭它们,以…

CYQ.Data 轻量数据层之路 使用篇三曲 MAction 取值赋值(十四)

2019独角兽企业重金招聘Python工程师标准>>> 上一篇:CYQ.Data 轻量数据层之路 使用篇二曲 MAction 数据查询(十三) 内容概要 本篇继续上一篇内容,本节介绍所有取值与赋值的相关操作。1:原生:像操作Row一样…

CYQ.Data 数据框架 发放V1.5版本源码

2019独角兽企业重金招聘Python工程师标准>>> 本篇的内容很简单,就发放V1.5版本源码,同时补充了所有发布版本的API文档。 具体相关下载地址见: 秋色园下载中心:http://www.cyqdata.com/download/article-detail-426 如何…

New Bus Route

New Bus Route CodeForces - 792A There are n cities situated along the main road of Berland. Cities are represented by their coordinates — integer numbers a1, a2, ..., an. All coordinates are pairwise distinct. It is possible to get from one city to …

爱说说技术原理:与TXT交互及MDataTable对Json的功能扩展(二)

2019独角兽企业重金招聘Python工程师标准>>> 关于爱说说在技术选型的文章见:"爱说说"技术原理方案的定选思考过程 本篇将讲述“爱说说”比较重大的技术问题点及解决手段: 爱说说:http://speak.cyqdata.com/ 杂说几句&am…

ActiveXObject 安装

将后缀名为ocx的文件拷贝至目录 c:\Windows\SysWOW64\。执行如下命令,进行注册:regsvr32 c:\Windows\SysWOW64\x.ocx转载于:https://www.cnblogs.com/Currention/p/11024354.html

如何制作VSPackage的安装程序

2019独角兽企业重金招聘Python工程师标准>>> 第一步,生成一个REG文件: 收钱进入目录: C:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Tools\Bin 这是SDK的目录,使用regpkg.exe 命令 命令格式为: …

MyBatis学习总结(1)——MyBatis快速入门

2019独角兽企业重金招聘Python工程师标准>>> 一、Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和…

MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建

2019独角兽企业重金招聘Python工程师标准>>> 这次换了台电脑,所以需要重新配置一次项目开发环境,过程中的种种,记录下来,便于以后再次安装,同时给大家一个参考。 1.JDK的安装 首先下载JDK,这个从…

Java基础学习总结(10)——static关键字

2019独角兽企业重金招聘Python工程师标准>>> 一、static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量。对于static成员变量来说,这个成员变量只…

ActiveMQ学习总结(3)——spring整合ActiveMQ

2019独角兽企业重金招聘Python工程师标准>>> 1.参考文献 Spring集成ActiveMQ配置Spring JMS异步发收消息 ActiveMQ2.环境 在前面的一篇 ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spring环境下集成ActiveMQ。如果要在spring下集成Act…

Pots【广搜,模拟】

Pots POJ - 3414 You are given two pots, having the volume of A and B liters respectively. The following operations can be performed: FILL(i) fill the pot i (1 ≤ i ≤ 2) from the tap;DROP(i) empty the pot i to the drain;POUR(i,j) pour fro…

非常可乐【广搜,模拟】

非常可乐 HDU - 1495 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子&#xff0…

问题 A: 深度学习

问题 A: 深度学习 时间限制: 1 Sec 内存限制: 128 MB 提交: 53 解决: 42 [提交] [状态] [讨论版] [命题人:admin] 题目描述 小 A 最近在研究深度学习,他自己搭建了一个很牛逼的神经网络,现在他手头一共有 n 组训练数据,一开始他会给自己的…

堆树

一、堆树的定义 堆树的定义如下: (1)堆树是一颗完全二叉树; (2)堆树中某个节点的值总是不大于或不小于其孩子节点的值; (3)堆树中每个节点的子树都是堆树。 当父节点的键…

问题 D: 最小生成树II

问题 D: 最小生成树II 时间限制: 1 Sec 内存限制: 128 MB 提交: 89 解决: 44 [提交] [状态] [讨论版] [命题人:admin] 题目描述 小A有一张n个点的带权无向图,这张无向图非常特别,首先第i个点有一个点权ai,之后这张无向图是一张完全图&…

问题 G: 区间权值

问题 G: 区间权值 时间限制: 1 Sec 内存限制: 128 MB 提交: 112 解决: 49 [提交] [状态] [讨论版] [命题人:admin] 题目描述 小Bo有n个正整数a1..an,以及一个权值序列w1…wn,现在他定义 现在他想知道的值,需要你来帮帮他 你只需要输出答案…

问题 I: 连通块计数

问题 I: 连通块计数 时间限制: 1 Sec 内存限制: 128 MB 提交: 108 解决: 45 [提交] [状态] [讨论版] [命题人:admin] 题目描述 小A有一棵长的很奇怪的树,他由n条链和1个点作为根构成,第i条链有ai个点,每一条链的一端都与根结点相连。 现在…

telnet 功能启用并测试端口是否正常

记录日期:2019年6月21日 13点52分 操作系统:Windows 10 由于 Ping命令可以检查网络是否连通,但无法准确判断某个端口是否连通,因此需要使用 Telnet协议。 1、打开控制面板中的程序和功能。 2、侧边栏,启用或关闭Window…

步步为营 SharePoint 开发学习笔记系列 七、SharePoint Timer Job 开发

概要 项目需求要求我们每天晚上同步员工的一些信息到sharepoint 的user List ,我们决定定制开发sharepoint timer Job,Sharepoint timer Job是sharePoint的定时作业Job,需要安装、布曙到服务器上,而这里我只是介绍下Job开发的例子,以供大家学习用。 开发…