展会信息港展会大全

Android 实现书籍翻页效果
来源:互联网   发布日期:2015-09-24 19:55:56   浏览:1807次  

导读:其实翻页的动画很容易实现,只要在Touch抬起后不断的刷新mTouch.x , mTouch.y 的值就行了, 你可以使用handler,thread,也可以使用Scroller,我个人比较喜欢Scroller,这个比较简单。新添两个函数:privat......

其实翻页的动画很容易实现,只要在Touch抬起后不断的刷新mTouch.x , mTouch.y 的值就行了, 你可以使用handler,thread,也可以使用Scroller,我个人比较喜欢Scroller,这个比较简单。

新添两个函数:

private void startAnimation(int delayMillis) {

int dx, dy;

// dx 水平方向滑动的距离,负值会使滚动向左滚动

// dy 垂直方向滑动的距离,负值会使滚动向上滚动

if (mCornerX > 0) {

dx = -(int) (mWidth + mTouch.x);

} else {

dx = (int) (mWidth - mTouch.x + mWidth);

}

if (mCornerY > 0) {

dy = (int) (mHeight - mTouch.y);

} else {

dy = (int) (1 - mTouch.y); // 防止mTouch.y最终变为0

}

mScroller.startScroll((int) mTouch.x, (int) mTouch.y, dx, dy,

delayMillis);

}

public void computeScroll() {

super.computeScroll();

if (mScroller.computeScrollOffset()) {

float x = mScroller.getCurrX();

float y = mScroller.getCurrY();

mTouch.x = x;

mTouch.y = y;

postInvalidate();

}

}

接着在按下抬起时调用就行了

if (event.getAction() == MotionEvent.ACTION_UP) {

if (canDragOver()) { //判断是否可以翻页

startAnimation(1200);

} else {

mTouch.x = mCornerX - 0.09f; //如果不能翻页就让mTouch返回没有静止时的状态

mTouch.y = mCornerY - 0.09f; // - 0.09f是防止mTouch = 800 或mTouch= 0 要不在这些值时会出现BUG

}

还需要修改的地方是calcPoints() 这个函数,之前为了防止一个bug出现,添加了if (mBezierStart1.x < 0 || mBezierStart1.x > mWidth) {这个判断,但是在翻页动画时mTouch.x会小于0(从右向左翻时)或者mTouch.x>mWidth(从左往右)这时并不需要在进入这个函数进行处理,所以要在这个情况时将其屏蔽,改为:

if (mTouch.x > 0 && mTouch.x < mWidth) {

if (mBezierStart1.x < 0 || mBezierStart1.x > mWidth) {

}

}

经过上边的修改就可以完成动画效果了。

还有的童鞋想将这个做成一个电子书阅读器,但是不知道如何将txt中的内容转换为翻页所需的图片,并在翻页后进行切换。所以我新添加了一个简单的类 BookPageFactory,用来读取SD卡中的一个txt,并将读取的内容转换为一个bitmap用于显示。哈哈,这个只是一个功能很小的类,只是给大家做个演示,起到抛砖引玉的作用。大家请根据自己所需的功能酌情修改。

源码附带的是一个简单的带翻页动画的电子书阅读器,大家测试时请将test.txt放于SD卡根目录下:

pagefactory.openbook("/sdcard/test.txt");

新的界面截图:

\

赞助本站

人工智能实验室

相关热词: 翻页 效果 书籍

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港