博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 实现书籍翻页效果----升级篇
阅读量:4208 次
发布时间:2019-05-26

本文共 1814 字,大约阅读时间需要 6 分钟。

自从之前发布了《Android 实现书籍翻页效果----完结篇 》之后,收到了很多朋友给我留言,前段时间由于事情较多,博客写得太匆忙很多细节地方没有描述清楚。所以不少人对其中的地方有不少不明白之处,也有不少人对其中出现的Bug进行了反馈。今天终于找出了段时间对这段时间的一些问题做个简单的总结。

     之前给出的例子只是能使书籍进行简单的拖拽,没有实现翻页的动画效果,很多人希望我能加上这一个,所以首先我们就来说说这个翻页的动画。

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

  新添两个函数:

[java] 
  1. private void startAnimation(int delayMillis) {  
  2.         int dx, dy;  
  3.         // dx 水平方向滑动的距离,负值会使滚动向左滚动  
  4.         // dy 垂直方向滑动的距离,负值会使滚动向上滚动  
  5.         if (mCornerX > 0) {  
  6.             dx = -(int) (mWidth + mTouch.x);  
  7.         } else {  
  8.             dx = (int) (mWidth - mTouch.x + mWidth);  
  9.         }  
  10.         if (mCornerY > 0) {  
  11.             dy = (int) (mHeight - mTouch.y);  
  12.         } else {  
  13.             dy = (int) (1 - mTouch.y); // 防止mTouch.y最终变为0  
  14.         }  
  15.         mScroller.startScroll((int) mTouch.x, (int) mTouch.y, dx, dy,  
  16.                 delayMillis);  
  17.     }  
  18.   
  19. public void computeScroll() {  
  20.         super.computeScroll();  
  21.         if (mScroller.computeScrollOffset()) {  
  22.             float x = mScroller.getCurrX();  
  23.             float y = mScroller.getCurrY();  
  24.             mTouch.x = x;  
  25.             mTouch.y = y;  
  26.             postInvalidate();  
  27.         }  
  28.     }  

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

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");

 

新的界面截图:

        

 

 

源码下载地址:

      

转载地址:http://molli.baihongyu.com/

你可能感兴趣的文章
论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取
查看>>
论文浅尝 | 融合多粒度信息和外部语言知识的中文关系抽取
查看>>
论文浅尝 | GMNN: Graph Markov Neural Networks
查看>>
廖雪峰Python教程 学习笔记3 hello.py
查看>>
从内核看epoll的实现(基于5.9.9)
查看>>
python与正则表达式
查看>>
安装.Net Framework 4.7.2时出现“不受信任提供程序信任的根证书中终止”的解决方法
查看>>
input type=“button“与input type=“submit“的区别
查看>>
解决Github代码下载慢问题!
查看>>
1.idea中Maven创建项目及2.对idea中生命周期的理解3.pom文件夹下groupId、artifactId含义
查看>>
LeetCode-栈|双指针-42. 接雨水
查看>>
stdin,stdout,stderr详解
查看>>
Linux文件和设备编程
查看>>
文件描述符
查看>>
终端驱动程序:几个简单例子
查看>>
登录linux密码验证很慢的解决办法
查看>>
fcntl函数总结
查看>>
HTML条件注释
查看>>
Putty远程服务器的SSH经验
查看>>
内核态与用户态
查看>>