用DirectionalViewPager代替ViewPager

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

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


 

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

TestFragment:


  1. package com.way.verticalguider;  
  2.   
  3. import com.way.newversion.R;  
  4.   
  5. import android.os.Bundle;  
  6. import android.support.v4.app.Fragment;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  // http://www.openeim.com/
  9. import android.view.ViewGroup;  
  10. import android.widget.Button;  
  11. import android.widget.ImageView;  
  12.   
  13. public class TestFragment extends Fragment {  
  14.     private static final String KEY_CONTENT = "TestFragment:Content";  
  15.     private static final String KEY_ISLASTPIC = "TestFragment:IsLastPic";  
  16.     private int mContent;  
  17.     private boolean mIsLastPic;  
  18.   
  19.     public static TestFragment newInstance(int content, boolean isLastPic) {  
  20.         TestFragment fragment = new TestFragment();  
  21.   
  22.         fragment.mContent = content;  
  23.         fragment.mIsLastPic = isLastPic;  
  24.         return fragment;  
  25.     }  
  26.   
  27.     @Override  
  28.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  29.             Bundle savedInstanceState) {  
  30.         if ((savedInstanceState != null)  
  31.                 && savedInstanceState.containsKey(KEY_CONTENT)) {  
  32.             mContent = savedInstanceState.getInt(KEY_CONTENT);  
  33.             mIsLastPic = savedInstanceState.getBoolean(KEY_ISLASTPIC);  
  34.         }  
  35.         View root = inflater  
  36.                 .inflate(R.layout.fragment_layout, container, false);  
  37.         ImageView iv = (ImageView) root.findViewById(R.id.iv);  
  38.         iv.setImageResource(mContent);  
  39.         Button btn = (Button) root.findViewById(R.id.btn);  
  40.         if (mIsLastPic)  
  41.             btn.setVisibility(View.VISIBLE);  
  42.         else  
  43.             btn.setVisibility(View.GONE);  
  44.         return root;  
  45.     }  
  46.   
  47.     @Override  
  48.     public void onSaveInstanceState(Bundle outState) {  
  49.         super.onSaveInstanceState(outState);  
  50.         outState.putInt(KEY_CONTENT, mContent);  
  51.         outState.putBoolean(KEY_ISLASTPIC, mIsLastPic);  
  52.     }  
  53. }  
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;
	}

	@Override
	public 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);
		else
			btn.setVisibility(View.GONE);
		return root;
	}

	@Override
	public void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		outState.putInt(KEY_CONTENT, mContent);
		outState.putBoolean(KEY_ISLASTPIC, mIsLastPic);
	}
}

TestFragmentAdapter:
  1. package com.way.verticalguider;  
  2.   
  3. import com.way.newversion.R;  
  4.   
  5. import android.support.v4.app.Fragment;  
  6. import android.support.v4.app.FragmentManager;  
  7. import android.support.v4.app.FragmentPagerAdapter;  
  8.   
  9. class TestFragmentAdapter extends FragmentPagerAdapter {  
  10.     protected static final int[] CONTENT = new int[] {  
  11.             R.drawable.biz_ad_new_version1_img0,  
  12.             R.drawable.biz_ad_new_version1_img1,  
  13.             R.drawable.biz_ad_new_version1_img2,  
  14.             R.drawable.biz_ad_new_version1_img3 };  
  15.   
  16.     public TestFragmentAdapter(FragmentManager fm) {  
  17.         super(fm);  
  18.     }  
  19.   
  20.     @Override  
  21.     public Fragment getItem(int position) {  
  22.         boolean isLastPic = false;  
  23.         if (position == CONTENT.length - 1)  
  24.             isLastPic = true;  
  25.         return TestFragment.newInstance(CONTENT[position], isLastPic);  
  26.     }  
  27.   
  28.     @Override  
  29.     public int getCount() {  
  30.         return CONTENT.length;  
  31.     }  
  32. }  
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);
	}

	@Override
	public Fragment getItem(int position) {
		boolean isLastPic = false;
		if (position == CONTENT.length - 1)
			isLastPic = true;
		return TestFragment.newInstance(CONTENT[position], isLastPic);
	}

	@Override
	public int getCount() {
		return CONTENT.length;
	}
}

下面是我修改后例子的下载链接:

 


其实无论像这种上下滑动引导页的效果,可以有多种方式去实现,在此仅提供不敢说是最优化,但一定是 最便捷的一种方法.

有时间的话我会再研究下聚合阅读的那个动画效果,在此先记录下, 大家如有好的意见,欢迎讨论.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值