ViewPager已经有了滑动的功能

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.lemon.viewpagerdemo.MainActivity"> <android.support.v4.view.ViewPager
android:id="@+id/main_viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"> </android.support.v4.view.ViewPager>
</LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private ViewPager mViewPager;
private int[] mImgIds = new int[] { R.drawable.a,
R.drawable.b, R.drawable.c};
private List<ImageView> mImageViews = new ArrayList<ImageView>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
mViewPager = (ViewPager) findViewById(R.id.main_viewpager);
mViewPager.setAdapter(new PagerAdapter(){
@Override
public Object instantiateItem(ViewGroup container, int position)
{ container.addView(mImageViews.get(position));
return mImageViews.get(position);
} @Override
public void destroyItem(ViewGroup container, int position,
Object object)
{ container.removeView(mImageViews.get(position));
} @Override
public boolean isViewFromObject(View view, Object object)
{
return view == object;
} @Override
public int getCount()
{
return mImgIds.length;
}
}); //setPageTransformer(boolean reverseDrawingOrder, PageTransformer transformer)
//用于设置ViewPager切换时的动画效果
mViewPager.setPageTransformer(true,new DepthPageTransformer());
} private void initData() {
for (int imgId : mImgIds)
{
ImageView imageView = new ImageView(getApplicationContext());
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageResource(imgId);
mImageViews.add(imageView);
}
}
}
DepthPageTransformer.java
public class DepthPageTransformer implements ViewPager.PageTransformer{
private static final float MIN_SCALE = 0.75f;
@Override
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
if(position<-1){ // [-Infinity,-1)
view.setAlpha(0);
}else if(position<=0){// [-1,0]
view.setAlpha(1);
view.setTranslationX(0);
view.setScaleX(1);
view.setScaleY(1);
}else if(position<=1){// (0,1]
view.setAlpha(1-position);
view.setTranslationX(pageWidth*-position);
float scaleFactor = MIN_SCALE+(1-MIN_SCALE)*(1-Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
}else{//(1,+Infinity]
view.setAlpha(0);
} }
}

Android开发学习--ViewPager使用入门的更多相关文章

  1. Android开发学习--MVP模式入门

    1.模型与视图完全分离,我们可以修改视图而不影响模型2.可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部3.我们可以将一个Presenter用于多个视图,而不需要改变Pr ...

  2. Android开发学习总结(一)——搭建最新版本的Android开发环境

    Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...

  3. Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通

    原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写 ...

  4. Android开发学习之路--MAC下Android Studio开发环境搭建

    自从毕业开始到现在还没有系统地学习android应用的开发,之前一直都是做些底层的驱动,以及linux上的c开发.虽然写过几个简单的app,也对android4.0.3的源代码做过部分的分析,也算入门 ...

  5. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  6. Android开发学习路线图

    Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...

  7. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  8. Android开发学习之LauncherActivity开发启动的列表

    Android开发学习之LauncherActivity开发启动的列表 创建项目:OtherActivity 项目运行结果:   建立主Activity:OtherActivity.java [jav ...

  9. 最实用的Android开发学习路线分享

    Android开发学习路线分享.Android发展主导移动互联发展进程,在热门行业来说,Android开发堪称火爆,但是,虽然Android有着自身种种优势,但对开发者的专业性要求也是极高,这种要求随 ...

随机推荐

  1. Got error: 1449: The user specified as a definer ('root'@'%') does not exist when using LOCK TAB

    在linux下,用mysql的导出语句: mysqldump -hlocalhost -uroot -pPasswd table >/home/ftp/test.sql 出现了 mysqldum ...

  2. 一些java错误

    @Override must override a superclass method 问题解决 如果在使用Eclipse开发Java项目时,在使用 @Override 出现以下错误: The met ...

  3. bzoj 4521 电话号码

    题目大意: 求$[L,R]$中,满足不同时存在4和8且有连续三个一样的个数 思路: 我为什么要记忆化搜索里带-1啊 我可真是个** 直接记忆化搜索记前两位是否有4,8以及是否满足连续 #include ...

  4. ThreadLocal工具类的使用(隔离思想)

    ThreadLocal不是用来解决共享对象的多线程访问问题的, 通过ThreadLocal的set()方法设置到线程的ThreadLocal.ThreadLocalMap里的是是线程自己要存储的对象, ...

  5. django flask缓存memcache的key生成方法介绍

    去年的一个django项目中,使用了memcache作为系统缓存,并实现多台机器上的缓存共享.配置的cache如下图所示: 最近在项目调试过程中,发现memcache在进行缓存时,使用的key并不是实 ...

  6. Apollo自动驾驶框架试玩

    2017年7月5日,百度举行了AI开发者大会,在会上发布了Apollo项目,并进行了演示,该项目在Github上已经能够被访问.出于一个程序员的好奇,昨天试玩了一把,确实不错. http://apol ...

  7. snnu1111(子序列求和)

    1111: 子序列求和 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 10  Solved: 2[Submit][Status][Web Board] [ ...

  8. P3398 仓鼠找sugar 又一次血的教训

    做什么题都要注意数组的大小,不要犯下数组越界的错误(温馨(狠心)提示): 做了好多遍就是不对,原来是[20]的数组,在for下循环1——>20,神奇爆零: 链接:https://www.luog ...

  9. STM32F4 DMA2D_M2M_PFC

    此例程为STM324x9I_EVAL:DCMI_CaptureMode,使用的stm32f4xx_hal_driver, At each camera line event, the line is ...

  10. MultipartFile(文件的上传)--CommonsMultipartResolver

    转自:https://www.cnblogs.com/896240130Master/p/6430908.html SpringMVC 中,文件的上传,是通过 MultipartResolver 实现 ...