Android 仿網易新聞v3.5:上下滑動的引導頁

來源:互聯網
上載者:User

     最近看了下網易新聞月初發布的3.5版,發現兩個比較明顯的改動:

    1.引導頁的修改,變為上下滑動. 2.增加了彙總閱讀,裡面的動畫效果也是蠻有創意的.於是又禁不住模仿一下

這次先看這個上下滑動的引導頁:

                                           

                  

這種效果具體怎麼做呢?

首先直接上github,直接看有沒有相關的開源項目,果不其然,被我找到了:

https://github.com/JakeWharton/Android-DirectionalViewPager

JakeWharton,看到這個名字是不是感到很熟悉?沒錯,ActionBarSherlock,ViewPagerInicator等著名的開源項目皆處於此人之手.

這個項目實際上是在ViewPager的基礎上,做了一個擴充,加入了對上下方向滑動的支援

正如項目的名字,使用該項目,可以靈活的改變viewpager的方向,而且僅用一個簡單的屬性設定就可以做到,我只對該項目提供的例子做了一些簡單的改動,就做到了網易新聞這個引導頁的效果.

廢話不多說,直接進入正題:

先看下項目的:

項目中最主要的部分:

DirectionalViewPager:直接繼承自ViewPager,主要在onInterceptTouchEvent()和onTouchEvent()裡面加入了對於垂直方向滑動的支援.並提供了setOrientation()這個方法,

我們可以同過此方法,直接設定ViewPager的滑動效果,垂直或者是水平

VerticalViewPagerCompat:提供了設定DataSetObserver的方法:setDataSetObserver()

接下來看具體使用的部分:

MainActivity:

package com.way.verticalguider;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import com.way.directionalviewpager.DirectionalViewPager;import com.way.newversion.R;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);//設定ViewPager滑動方向}}


實際應用中,我們直接用DirectionalViewPager代替ViewPager,再設定其滑動方向即可,既可以水平,也可以垂直,一個setOritation直接搞定.

看到了吧,實現上下滑動的效果就這麼簡單.在此不得不致敬JakeWharton這位大牛在開源項目上的貢獻,讓我們這些開發人員受益頗深..

例子中其他部分,我只替換了資源圖片:

TestFragment:

package com.way.verticalguider;import com.way.newversion.R;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);}}

TestFragmentAdapter:

package com.way.verticalguider;import com.way.newversion.R;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;}}

下面是我修改後例子的下載連結:

http://download.csdn.net/detail/t12x3456/5789713

其實無論像這種上下滑動引導頁的效果,可以有多種方式去實現,在此僅提供不敢說是最佳化,但一定是 最便捷的一種方法.

有時間的話我會再研究下彙總閱讀的那個動畫效果,在此先記錄下, 大家如有好的意見,歡迎討論.

如有轉載,請聲明出處: http://blog.csdn.net/t12x3456

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.