ViewPager基本用法

ViewPager基本用法step1:在layout中定义一个ViewPager组件。step2:在Activity中获取ViewPager的引用。step3:为ViewPager设置适配器,step4:为ViewPa

大家好,又见面了,我是你们的朋友全栈君。

step1:在layout中定义一个ViewPager组件。

<android.support.v4.view.ViewPager>

step2:在Activity中获取ViewPager的引用。

pager=(ViewPager) findViewById(R.id.view_pager);

step3: 为ViewPager设置适配器,

PagerAdapter adapter=new ViewAdapter(pages); pager.setAdapter(adapter);

step4:为ViewPager设置滑动特效

浮现特效:Google为我们提供了API,android.support.v4.view.ViewPager.PageTransformer接口

public void transformPage(View page, float position)

page表示ViewPager中的一页,position[0,0]表示当前屏幕的一页,[0,-1]表示屏幕左边第一页,【0,1】表示屏幕右边第一页

当`page`向左边滑动时,`position`从0向-1变化,当`position==-1`时完全不可见;当`page`向右滑动时,`position`从0向1变化,当`position==1`时完全不可见。

//滑动特效

public class ScalePageTransformer implements ViewPager.PageTransformer {

private static final float MIN_SCALE=0.75f;

@Override

public void transformPage(View page, float position) {

//Log.d("TAG", "<"+page.hashCode()+", "+position+">");

// out of left screen

if(position<-1.0f) {

page.setScaleX(MIN_SCALE);

page.setScaleY(MIN_SCALE);

}

// slide left

else if(position<=0.0f) {

page.setAlpha(1.0f);

page.setTranslationX(0.0f);

page.setScaleX(1.0f);

page.setScaleY(1.0f);

}

// slide right

else if(position<=1.0f) {

page.setAlpha(1.0f-position);

page.setTranslationX(-page.getWidth()*position);

float scale=MIN_SCALE+(1.0f-MIN_SCALE)*(1.0f-position);

page.setScaleX(scale);

page.setScaleY(scale);

}

// out of right screen

else {

page.setScaleX(MIN_SCALE);

page.setScaleY(MIN_SCALE);

}

}

}

//旋转特效

public class RotatePageTransformer implements ViewPager.PageTransformer {

private static final float MAX_ROTATION=20.0f;

@Override

public void transformPage(View page, float position) {

if(position<-1)

rotate(page, -MAX_ROTATION);

else if(position<=1)

rotate(page, MAX_ROTATION*position);

else

rotate(page, MAX_ROTATION);

}

private void rotate(View view, float rotation) {

view.setPivotX(view.getWidth()*0.5f);

view.setPivotY(view.getHeight());

view.setRotation(rotation);

}

}

// 3d相册---1.围绕Y轴旋转一定的角度

public class GalleryPageTransformer implements ViewPager.PageTransformer {

private static final float MAX_ROTATION=20.0f;

private static final float MIN_SCALE=0.75f;

private static final float MAX_TRANSLATE=20.0f;

@Override

public void transformPage(View page, float position) {

if(position<-1) {

page.setTranslationX(MAX_TRANSLATE);

page.setScaleX(MIN_SCALE);

page.setScaleY(MIN_SCALE);

page.setRotationY(-MAX_ROTATION);

}

else if(position<=0) {

page.setTranslationX(-MAX_TRANSLATE*position);

float scale=MIN_SCALE+(1-MIN_SCALE)*(1.0f+position);

page.setScaleX(scale);

page.setScaleY(scale);

page.setRotationY(MAX_ROTATION*position);

}

else if(position<=1) {

page.setTranslationX(-MAX_TRANSLATE*position);

float scale=MIN_SCALE+(1-MIN_SCALE)*(1.0f-position);

page.setScaleX(scale);

page.setScaleY(scale);

page.setRotationY(MAX_ROTATION*position);

}

else {

page.setTranslationX(-MAX_TRANSLATE);

page.setScaleX(MIN_SCALE);

page.setScaleY(MIN_SCALE);

page.setRotationY(MAX_ROTATION);

}

}

}

// 3d相册---2.生成有倒影的图片

public static Bitmap getReverseBitmapById(Context context, int resId, float percent) {

// get the source bitmap

Bitmap srcBitmap=BitmapFactory.decodeResource(context.getResources(), resId);

// get the tow third segment of the reverse bitmap

Matrix matrix=new Matrix();

matrix.setScale(1, -1);

Bitmap rvsBitmap=Bitmap.createBitmap(srcBitmap, 0, (int) (srcBitmap.getHeight()*(1-percent)),

srcBitmap.getWidth(), (int) (srcBitmap.getHeight()*percent), matrix, false);

// combine the source bitmap and the reverse bitmap

Bitmap comBitmap=Bitmap.createBitmap(srcBitmap.getWidth(),

srcBitmap.getHeight()+rvsBitmap.getHeight()+20, srcBitmap.getConfig());

Canvas gCanvas=new Canvas(comBitmap);

gCanvas.drawBitmap(srcBitmap, 0, 0, null);

gCanvas.drawBitmap(rvsBitmap, 0, srcBitmap.getHeight()+20, null);

Paint paint=new Paint();

LinearGradient shader=new LinearGradient(0, srcBitmap.getHeight()+20, 0, comBitmap.getHeight(),

Color.BLACK, Color.TRANSPARENT, Shader.TileMode.CLAMP);

paint.setShader(shader);

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

gCanvas.drawRect(0, srcBitmap.getHeight()+20, srcBitmap.getWidth(), comBitmap.getHeight(), paint);

return comBitmap;

}

// 3d相册---3.对原图进行处理

private List<View> getPages() {

List<View> pages=new ArrayList<>();

Field[] fields=R.drawable.class.getDeclaredFields();

try {

for (Field field : fields) {

if (field.getName().startsWith("page")) {

ImageView view = new ImageView(this);

view.setImageBitmap(ImageUtils.getReverseBitmapById(this, field.getInt(null), 0.5f));

pages.add(view);

}

}

} catch (IllegalAccessException e) {

e.printStackTrace();

}

return pages;

}

step5:为这个pager添加这个特效

pager.setPageTransformer(true, new ScalePageTransformer());

step6: 设置监听

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

mBottomNavigationBar.selectTab(position);

setDarkStatusIcon(position != 2);

}

@Override

public void onPageScrollStateChanged(int state) {

}

});

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154993.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm选哪个版本_pycharm版本区别

    pycharm选哪个版本_pycharm版本区别在pycharm中点击file-&gt;setting-&gt;project-&gt;projectInterpreter。 在出现的projectInterpreter右边的齿轮形状的图标点击add如下图,可以选择自己的版本

  • idea 2021.5.3过期后怎么输激活码[在线序列号]

    idea 2021.5.3过期后怎么输激活码[在线序列号],https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Java经典设计模式之十一种行为型模式(附实例和详解)

    Java经典设计模式之十一种行为型模式(附实例和详解)

    2020年11月12日
  • excel隐含模块编译错误_打印提示错误

    excel隐含模块编译错误_打印提示错误一、灾难性问题(这是编译的设置引起的):解决办法:Debug换成AnyCPU但是,使用AnyCpu,出现了以下警告所生成项目的处理器架构“MSIL”与引用“ImageViewControlLib”的处理器架构“AMD64”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改您的项目的目标处理器架构,以使您的项目与引用间的处理器架构保持一致,或者为引用关联一个与…

  • vim复制粘贴_vim怎么复制粘贴到其他程序

    vim复制粘贴_vim怎么复制粘贴到其他程序Vim复制粘贴探秘Vim作为最好用的文本编辑器之一,使用vim来编文档,写代码实在是很惬意的事情。每当学会了vim的一个新功能,就会很大地提高工作效率。有人使用vim几十年,还没有完全掌握vim的功能,这也说明了vim的强大。而这样何尝不是一件好事呢,只要有的学习,就有的提高。最近使用Vim来写博客,发现在Vim中粘贴Python代码后,缩进就全乱了。仔细研究了以下,原来是自动缩进的缘故,于是做如下设置::setnoainosi取消了自动缩进和智能缩进,这样粘贴就不会错行了。但

  • struct的用法「建议收藏」

    struct的用法「建议收藏」使用结构体类型处理组合数据:即用户自定义数据类型。1c语言提供了很多系统类型。如intcharfloatdouble等等,但是这都是单一的数据类型,如果对于一个学生作为一个整体的话,那么他的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号