android viewpager 上下滚动条,安卓 ViewPager-上下滑动

安卓 ViewPager-上下滑动

自带是左右滑动的,写一个类,继承自 ViewPager,使其实现上下滑动,网上有人写好了,我也偷懒了,直接复制过来。原文见:https://blog.csdn.net/k_bb_666/article/details/79843477。该文章还介绍了横向、纵向嵌套的问题。package com.itpow.android;

import android.content.Context;

import android.support.v4.view.ViewPager;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.view.View;

public class VerticalViewPager extends ViewPager {

public VerticalViewPager(Context context) {

super(context);

init();

}

public VerticalViewPager(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

private void init() {

// 最重要的设置,将viewpager翻转

setPageTransformer(true, new VerticalPageTransformer());

// 设置去掉滑到最左或最右时的滑动效果

setOverScrollMode(OVER_SCROLL_NEVER);

}

private class VerticalPageTransformer implements ViewPager.PageTransformer {

@Override

public void transformPage(View view, float position) {

if (position < -1) { // [-Infinity,-1)

// 当前页的上一页

view.setAlpha(0);

} else if (position <= 1) { // [-1,1]

view.setAlpha(1);

// 抵消默认幻灯片过渡

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

//设置从上滑动到Y位置

float yPosition = position * view.getHeight();

view.setTranslationY(yPosition);

} else { // (1,+Infinity]

// 当前页的下一页

view.setAlpha(0);

}

}

}

/**

* 交换触摸事件的X和Y坐标

*/

private MotionEvent swapXY(MotionEvent ev) {

float width = getWidth();

float height = getHeight();

float newX = (ev.getY() / height) * width;

float newY = (ev.getX() / width) * height;

ev.setLocation(newX, newY);

return ev;

}

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

boolean intercepted = super.onInterceptTouchEvent(swapXY(ev));

swapXY(ev);

return intercepted; //为所有子视图返回触摸的原始坐标

}

@Override

public boolean onTouchEvent(MotionEvent ev) {

return super.onTouchEvent(swapXY(ev));

}

}

使用的时候,就是布局文件中不用 ViewPager,而用这个 VerticalViewPager。

安卓 ViewPager-上下滑动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值