背景图片跟随手势滑动的ViewPager

[复制链接]
来自: MrlLee 分类: Android精品源码 上传时间: 2016-6-21 10:59:33
Tag:ViewPager

项目介绍:

背景图片跟随手势滑动的ViewPager,可各方向滑动或点击切换页面。
组成
项目由一个Activity和五个fragment组成。
主要代码介绍
1、横向背景移动的ViewPager中,重写dispatchDraw方法:
[Java] 查看源文件 复制代码
@Override
protected void dispatchDraw(Canvas canvas) {
   if (this.bg != null) {
        int width = this.bg.getWidth();
        int height = this.bg.getHeight();
        int count = getAdapter().getCount();
        int x = getScrollX();
        //子View中背景图片需要显示的宽度,放大背景图或缩小背景图。
        int n = height * getWidth() / getHeight();
        //(width - n) / (count - 1)表示除去显示第一个ViewPager页面用去的背景宽度,剩余的ViewPager需要显示的背景图片的宽度。
        //getWidth()等于ViewPager一个页面的宽度,即手机屏幕宽度。在该计算中可以理解为滑动一个ViewPager页面需要滑动的像素值。
        //((width - n) / (count - 1)) / getWidth()也就表示ViewPager滑动一个像素时,背景图片滑动的宽度。
        //x * ((width - n) / (count - 1)) / getWidth()也就表示ViewPager滑动x个像素时,背景图片滑动的宽度。
        //背景图片滑动的宽度的宽度可以理解为背景图片滑动到达的位置。
        int w = (x+getWidth()) * ((width - n) / (count - 1)) / getWidth();
        canvas.drawBitmap(this.bg, new Rect(w, 0, n + w, height), new Rect(x, 0, x + getWidth(), getHeight()), this.b);
    }
    super.dispatchDraw(canvas);
}
2、IScrollListener中控制是否可以方向滚动
void canScrollView(boolean isCanScroll);
3、添加FixedSpeedScroller类(继承Scroller),控制ViewPager调用setCurrentItem方法时的滚动速度。
[Java] 查看源文件 复制代码
private int mDuration = 800; // 默认为800ms
@Override
    public void startScroll(int startX, int startY, int dx, int dy, int duration) {
        super.startScroll(startX, startY, dx, dy, mDuration);
    }

    @Override
    public void startScroll(int startX, int startY, int dx, int dy) {
        super.startScroll(startX, startY, dx, dy, mDuration);
    }
游客,如果您要查看本帖隐藏内容请回复

相关源码推荐:

我来说两句
所有评论(36)
赤色暴风雨 2016-6-21 11:30:21
回复
373519580@qq.co 2016-6-21 15:59:19
看看是啥
回复
zhupengqq 2016-6-21 20:20:49
1
回复
小禅师 2016-6-22 09:01:48
楼主威武啊,安卓巴士有你更给力!
回复
人生不应无梦 2016-6-22 09:18:56
给力啊
回复
shu_1123 2016-6-22 09:29:13
学习学习!
回复
skingloving 2016-6-23 10:18:46
111111111111111111111
回复
12345下一页
2637 0 0
代码贡献英雄榜
用户名 下载数
联系我们
首页/微信公众账号投稿
帖子代码编辑/版权问题
QQ:435399051,1294855032
如何获得代码达人称号?
如何成为签约作者?
领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )