- 浏览: 258345 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
aaddsfdsfsdfs:
var map = new AMap.Map('contain ...
【map】使用高德地图显示地图轨迹 -
di1984HIT:
xiang
【linux】使用bind进行DNS配置 -
di1984HIT:
分别算么??
【java】改写js百度地图测距方法 -
di1984HIT:
不错不错。。
【LBS】使用高德地图实现轨迹路线 -
di1984HIT:
不好用啊???
【map】使用高德地图显示地图轨迹
很早前就想做一个小说阅读器的。最近终于做了下来。
其实很简单,这里只做了一小部分显示部分,还有标签,回翻的部分没有做。
读取文件采用RandomAccessFile对大文件进行操作。
早前使用read(byte[] b) 进行读取,可是总是有些意外,就是偶尔在一页的最后一行的几个字符出现乱码,导致下一页的前部分也会有乱码。而且这个问题很奇怪,自己在纯java环境中是没有任何的问题,可是只要在android虚拟机中就出现问题了。
后来采用readLine()方法。
一下是全部代码:
续:下面这个代码加入获得到达底部进行toast提示。
其实很简单,这里只做了一小部分显示部分,还有标签,回翻的部分没有做。
读取文件采用RandomAccessFile对大文件进行操作。
早前使用read(byte[] b) 进行读取,可是总是有些意外,就是偶尔在一页的最后一行的几个字符出现乱码,导致下一页的前部分也会有乱码。而且这个问题很奇怪,自己在纯java环境中是没有任何的问题,可是只要在android虚拟机中就出现问题了。
后来采用readLine()方法。
一下是全部代码:
package com.duduli.li; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ScrollView; import android.widget.TextView; public class Ibook2Activity extends Activity { private ScrollView sv; private TextView tv; private RandomAccessFile raf; private int scrollViewY = 0; private StringBuilder sb; private long currentPoint; private long fileLeght; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // sv = (ScrollView) this.findViewById(R.id.scrollView); tv = (TextView) this.findViewById(R.id.textView); sv = (ScrollView) this.findViewById(R.id.scrollView); File file = new File("/sdcard/zhuxian.txt"); try { raf = new RandomAccessFile(file, "r"); fileLeght = raf.length(); System.out.println("文件总长度: "+fileLeght); sb = new StringBuilder(); for(int i=0; i<=50;i++){ if(raf.getFilePointer() != fileLeght){ // string += new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n"); sb.append(new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n")); // break; }else{ break; } } // System.out.println(sb); currentPoint = raf.getFilePointer(); System.out.println(currentPoint); tv.setText(sb); // tv.setText(string); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } sv.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub // string = ""; if(event.getAction() == MotionEvent.ACTION_UP){ if (sv.getScrollY() == 0) { System.out.println("up"); } else if (sv.getScrollY() - scrollViewY < 2 && sv.getScrollY() >= scrollViewY) { try { raf.seek(currentPoint); sb.delete(0, sb.length()); for(int i=0; i<=50;i++){ if(raf.getFilePointer() != fileLeght){ // string += new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n"); sb.append(new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n")); // break; }else{ break; } } // System.out.println(string); currentPoint = raf.getFilePointer(); tv.setText(sb); // tv.setText(string); sv.scrollTo(0, 0); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { scrollViewY = sv.getScrollY(); // System.out.println(sv.getScrollY()); } System.out.println("currentPoint: "+currentPoint); System.out.println("ScrollY: "+sv.getScrollY()); } return false; } }); } }
续:下面这个代码加入获得到达底部进行toast提示。
package com.duduli.li; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; public class Ibook2Activity extends Activity { private ScrollView sv; private TextView tv; private RandomAccessFile raf; private int scrollViewY = 0; private StringBuilder sb; private long currentPoint; private long fileLeght; private boolean flag = true; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // sv = (ScrollView) this.findViewById(R.id.scrollView); tv = (TextView) this.findViewById(R.id.textView); sv = (ScrollView) this.findViewById(R.id.scrollView); File file = new File("/sdcard/test.txt"); try { raf = new RandomAccessFile(file, "r"); fileLeght = raf.length(); System.out.println("文件总长度: "+fileLeght); sb = new StringBuilder(); for(int i=0; i<=50;i++){ if(raf.getFilePointer() != fileLeght){ // string += new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n"); sb.append(new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n")); // break; }else{ break; } } // System.out.println(sb); currentPoint = raf.getFilePointer(); System.out.println(currentPoint); tv.setText(sb); // tv.setText(string); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } sv.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub // string = ""; if(event.getAction() == MotionEvent.ACTION_UP){ if (sv.getScrollY() == 0) { System.out.println("up"); } else if (sv.getScrollY() - scrollViewY < 2 && sv.getScrollY() >= scrollViewY) { try { if(flag){ System.out.println("begin"); raf.seek(currentPoint); sb.delete(0, sb.length()); for(int i=0; i<=50;i++){ if(raf.getFilePointer() != fileLeght){ // string += new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n"); sb.append(new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n")); // break; }else{ // flag = false; break; } } // System.out.println(string); currentPoint = raf.getFilePointer(); tv.setText(sb); // tv.setText(string); sv.scrollTo(0, 0); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { scrollViewY = sv.getScrollY(); // System.out.println(sv.getScrollY()); } if(!flag && (tv.getHeight() - sv.getScrollY() <= 362)){ Toast.makeText(getApplicationContext(), "本文已结束", Toast.LENGTH_SHORT).show(); } System.out.println(tv.getHeight()); System.out.println(sv.getScrollY()); } return false; } }); } }
发表评论
-
【android】访问web service(大概功能版)
2012-10-30 08:36 1368增加功能: 1,用户点击次数过快。提示。 2,增加progre ... -
【android】web service访问
2012-10-26 10:20 1372android对web service的访问。使用ksoap2 ... -
【android】在2.3.3下面是用DDMS模拟位置会死机
2012-08-05 15:54 1073整了很久很久。每次都是死机。 调试也调试了很久,最后发现在2. ... -
【android】一个小问题让我纠结了很久
2012-03-20 09:43 1487之前处理cursor的方法:此方法是有问题的!!! pub ... -
【android】使用checkedTextView形成自定义ListView(续)
2012-03-15 10:06 4723前面的已经介绍了如何将check选中,但是很不尽如人意的是,每 ... -
【android】checkedTextView形成自定义ListView
2012-03-14 16:48 8821网络上的那个东西似乎都不准,以下是我做的此方法为可行。 首先, ... -
【android系统问题】呼叫状态变化
2012-03-09 14:09 1898测试。做一个Receiver监听手机通话状态。发现这样个问题。 ... -
【android】电话接听状态事件
2012-03-01 10:36 3368androidmanifest权限: <uses-per ... -
【android】自定义listView(转http://yilee.info/android-diy-listview.html)
2012-02-29 14:25 1644本文讲实现一个自定义列表的Android程序,程序将实现一个使 ... -
【android】 sqliter数据库CRUD
2012-02-27 16:16 1338基础类,DBHelper package com.duduli ... -
【android】以前没有注意的一个ListActivity的问题
2012-02-27 15:52 1382以前自己都很少使用ListActivity。今天使用的时候就出 ... -
【android】的startActivityForResult
2012-02-24 16:41 1232似乎这个做登录或是论坛回复很好的。 不用返回。 一下几点需要注 ... -
【android】widget生命周期
2012-02-23 17:07 3592在widget开发的时候生命周期如下: 第一次创建桌 ... -
【android】传感器
2011-12-03 10:41 1030IBM develop 对android传感器的研究与开发。 ... -
【android】使用百度api获得你的地址
2011-12-02 12:06 3792采用百度开放平台的api对自己位置的定位的好处有很多。 1,完 ... -
【android】练手的小玩意
2011-11-30 16:17 1057这是个小程序,调用Google地图。显示你的大概位置。 当然不 ... -
【android】 百度地图应用开发(一)
2011-11-30 11:47 1765百度提供给我相当多的地图开发的api,比如地图,比如定位。 初 ... -
【android】利用service监听来电或来信息
2011-11-28 16:09 8116写这个东西只是为了练手,拍砖随意。反正自己也是菜鸟。 微信/Q ... -
【android地图】开发出现的问题。
2011-11-26 16:24 11282个问题,在虚拟机上没有这样的问题,但是到真机上实验的时候去出 ... -
android开发下的一些技术要点【如有需要会更新】
2011-11-14 15:36 38761,对于去title方法。在o ...
相关推荐
总的来说,“android 阅读器 源码.rar”提供了深入了解Android阅读器开发的宝贵资料,通过深入研究,开发者不仅可以掌握Android应用开发的基本技能,还能提升对复杂功能实现的理解,进一步提高自己的编程能力。
首先,关于Android阅读器开发,其核心在于处理各种格式的文档,如EPUB、PDF、MOBI等。在Android系统中,原生并不支持PDF的显示,因此,我们需要借助第三方库或者自行实现PDF解析和渲染。这里提到的"AndroidPdfViewer...
《Android阅读器_企业项目实习》是一份详细指导实习生参与Android阅读器开发的文档,旨在帮助实习生通过实际项目提升Android应用开发技能。本项目不仅涵盖了基础功能实现,还强调了在企业环境中所需的实践能力和技术...
对于Android平台而言,开发一款高效、易用的新闻阅读器,不仅需要对Android系统有深入理解,还要掌握数据抓取技术和Java编程。本文将深入探讨如何利用Java在Android平台上构建一个功能完善的新闻阅读器应用。 一、...
这篇文档将深入解析《Android应用源码电子书阅读器源码》这个项目,它是一个针对IT计算机专业学生的毕业设计示例,旨在帮助他们理解和实践Android应用程序的开发。在这个项目中,我们将探讨Android App的移动开发...
在本项目"基于Android平台的小说阅读器"中,开发者运用了Android Studio这一强大的集成开发环境,构建了一个轻量级的应用程序,旨在提供一个简洁、便捷的阅读体验。这款小说阅读器并未采用复杂的数据库系统,而是...
### Android阅读器开发详解 #### 一、项目概述 **标题**:“Android阅读器” **描述**:基于现有的源码进行二次开发,增加书签、字体缩放与书架等功能,构建一个完整的TXT文本阅读器。 #### 二、功能模块分析 #...
本篇将深入解析一款名为“Android文本阅读器”的毕业设计源码,旨在帮助初学者及毕业生理解Android应用的开发流程,并提供一个实际项目的学习参考。 首先,我们关注的是“Android文本阅读器”这一应用的核心功能。...
在Android平台上,开发一款TXT文本阅读器涉及到许多关键知识点,这些知识涵盖了Android应用的基础架构、UI设计、文件操作以及文本处理等。以下是对这个源码项目中可能涉及的关键技术点的详细说明: 1. **Android...
本文将深入探讨这款开源Android小说阅读器的源码,帮助开发者理解其内部机制,为自己的阅读应用开发提供灵感和参考。 首先,我们看到的是源码中的图片资源,如1-120ZZ054200-L.jpg和1_120909005653_1.jpg。这些图片...
【Android阅读器源码解析】 在移动设备上,阅读电子书籍已经成为现代生活的一部分,而Android平台因其开源性和广泛的用户基础,成为了开发阅读应用的理想选择。本篇将详细探讨一款名为"开心阅读"的Android TXT文件...
在Android平台上,开发一个TXT阅读器是一个常见的任务,它能够帮助用户轻松地浏览和阅读存储在设备SD卡上的TXT文本文件。"基于安卓开发的TXT阅读器源码"项目提供了这样的功能,允许开发者深入理解如何实现这样的应用...
本文将深入探讨“Android阅读器翻页”这一主题,包括其改良版本的功能增强,如支持播放视频和图片显示,以及实现这些功能所涉及的关键技术。 首先,Android阅读器翻页的核心是模拟真实的图书翻页效果。这通常涉及到...
在Android平台上,开发一款PDF阅读器是一个常见的需求,它能够帮助用户查看和处理PDF文档。本文将基于"看代码学Android开发系列:Android PDF阅读器源代码"这一主题,深入探讨Android PDF阅读器的实现原理和关键技术...
总的来说,这个Android小说阅读器项目涵盖了Android应用开发的多个核心方面,包括UI设计、数据存储、网络通信、多线程处理、权限管理以及用户体验优化,是Android开发学习的宝贵实践案例。通过研究源代码,开发者能...
这个"Android阅读器源码"提供了一个完整的解决方案,允许开发者快速整合到自己的项目中,节省了从零开始构建阅读器功能的时间和精力。下面我们将深入探讨这个源码中的关键知识点。 1. **UI设计**: - **书架界面**...
新浪RSS阅读器是一款基于Android平台的应用程序,它允许用户订阅并阅读来自新浪的RSS新闻源。源码分析有助于开发者理解RSS订阅和解析的过程,以及如何在Android环境下构建一个功能完善的新闻阅读应用。以下是对该...