Android ViewPager支持左右滑动来显示页面,如何才能让ViewPager支持垂直方向上的滑动呢,最开始的想法是希望通过自定义ViewPager的 setPageTransformer()方法支持的动画来实现上下滑动,不过这种方式只支持左右方向的动画定义。
Google了一下在StackOverflow上找到了解决方法http://stackoverflow.com/a/16920135/2293921,
本博客给大家推荐的开源方案是https://github.com/LambergaR/VerticalViewPager/,
此方案和ViewPager一样都是继承自ViewGroup,感觉这个将来可能会被Android收录在support v4中,
使用方法和ViewPager一样,步骤如下:
- 从上面的github上将ExtendedWebView.java、PagerAdapter.java、VerticalPagerView.java放到自己的工程里面
- 第一步做好后,就可以像使用ViewPager一样去使用了具体的代码可以参考如下
布局文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<com.gvconcepts.demo.viewpager.VerticalViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.gvconcepts.demo.viewpager.VerticalViewPager>
</RelativeLayout>
|
在Activity中使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
package com.gvconcepts.demo.viewpager;
import java.util.Random;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;
public class MainActivity extends Activity {
private VerticalViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (VerticalViewPager) findViewById(R.id.viewpager);
mViewPager.setAdapter(new MyPagerAdapter());
}
private class MyPagerAdapter extends PagerAdapter {
private static final String TAG = "PagerAdapter";
private Random mRandom = new Random();
@Override
public int getCount() {
return 6;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Log.d(TAG, "instantiateItem:" + position);
TextView tv = new TextView(MainActivity.this);
tv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
tv.setGravity(Gravity.CENTER);
tv.setTextSize(30);
tv.setBackgroundColor(Color.rgb(mRandom.nextInt(255),
mRandom.nextInt(255), mRandom.nextInt(255)));
tv.setTextColor(Color.WHITE);
tv.setText("Pager: " + position);
container.addView(tv);
return tv;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.d(TAG, "destroyItem:" + position);
container.removeView((View) object);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
|
是不是很简单?
效果如下: