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.pswp.cn/news/536388.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536388.shtml
英文地址,請注明出處:http://en.pswp.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開發的例子,以供大家學習用。 開發…