- 浏览: 74704 次
最新评论
-
zhangjie3140:
感谢分享
tabhost里解决按键事件捕获的问题 -
honghe:
请问我重写了 onCreateWindow,但处理window ...
在webview中访问互联网应用,碰到弹出窗口怎么办? -
肖默it:
解决了我的问题,感谢楼主的分享!
tabhost里解决按键事件捕获的问题 -
hecal:
太感谢了~~
tabhost里解决按键事件捕获的问题 -
guogzhao:
注意在if判断中要加一个event.getAction() = ...
tabhost里解决按键事件捕获的问题
原文地址:http://wangliping.net/read-big-txt
由于现在TXT文本很多,特别是好多小说也是以这个文件格式出现,毕竟这个格式所占用不必要的空间比较小。像我这样的人就非常喜欢在手机上看小说, 经常下载好多的TXT格式小说存到手机上以便空闲时候看。于是乎也试图做了一下如何在Android上实现看大文本的txt文档。
虽然现在类似的应用还真不少,不过个人看到的基本不公布源码,而公布源码的基本都是不能看大文本的,所以自己去实现了一下。现在只是粗 略实现了,实现方法是每次当滑动到屏幕底端时,从文件读2048字节出来显示到屏幕上。到屏幕底端再读是为了不给用户有刷屏的感觉,使用起来感觉不到只读 了2048字节出来,比较流畅。现在由于只是试验流畅性,所以只写了向下浏览的,而没有写往回读,也就是说往回翻是无效的。
废话不多说,代码是王道。这个是主文件:
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
import
java.nio.CharBuffer
;
import
android.app.Activity
;
import
android.net.Uri
;
import
android.os.AsyncTask
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.os.Message
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
android.widget.ScrollView
;
import net.wangliping.test.R ;
public
class
TxtReader
extends
Activity
implements
RealTimeTextView
.
OnTextChangedListener
{
private
static
final
String
LOG_TAG
=
"TxtReader"
;
private
static
final
int
SHOW_TXT
=
1
;
private
SwanTextView
mTextShow
;
private
ScrollView
mScrollView
;
private
String
mStringShow
=
null
;
private
boolean
mContinueRead
=
true
;
private
boolean
mHaveNewText
=
false
;
private
int
mCurBottom
=
-
1
;
private
int
mNum
=
-
1
;
private
final
Handler
mHandler
=
new
Handler
() {
@Override
public
void
handleMessage
(Message
msg
) {
switch
(msg
.
what
) {
case
SHOW_TXT:
mTextShow
.
setText
((CharBuffer
) msg
.
obj
);
break
;
default
:
super
.
handleMessage
(msg
);
}
}
};
public
void
onCreate
(Bundle
savedInstanceState
) {
super
.
onCreate
(savedInstanceState
);
setContentView
(R
.
layout
.
txt_reader
);
Uri uri = getIntent (). getData ();
mScrollView = (ScrollView ) findViewById (R . id . text_show_scroll );
mTextShow
=
(RealTimeTextView
) findViewById
(R
.
id
.
text_show
);
mTextShow
.
setOnTextChangedListener
(this
);
new
TextShowTask
().
execute
(uri
);
}
private
void
showText
(Uri
uri
) throws
IOException
,
InterruptedException
{
InputStreamReader
is
=
new
InputStreamReader
(new
FileInputStream
(
uri
.
getPath
()),
"GB2312"
);
StringBuilder
sb =
new
StringBuilder
();
char
[]
buf
=
new
char
[
1024
*
2
];
while
(true
) {
if
(mCurBottom
==
mScrollView
.
getScrollY
()) {
Log
.
d
(LOG_TAG
,
"curBtm:"
+
mCurBottom
+
" scroll:"
+
mScrollView
.
getScrollY
());
mCurBottom
=
-
1
;
mNum
++;
if
(mNum
%
2
==
0
) {
mContinueRead
=
true
;
Log
.
d
(LOG_TAG
,
"YES"
);
}
}
if
(mContinueRead
&&
is
.
read
(buf
) >
0
) {
mContinueRead
=
false
;
if
(sb.
length
() >
4096
) {
sb.
delete
(0
,
2048
);
Message
msg
=
mHandler
.
obtainMessage
(SHOW_TXT
);
msg
.
obj
=
CharBuffer
.
wrap
(sb.
toString
());
mHandler
.
sendMessage
(msg
);
mStringShow
=
sb.
append
(buf
).
toString
();
mHaveNewText
=
true
;
}
else
{
while
(sb.
length
() <
4096
) {
sb.
append
(buf
);
is
.
read
(buf
);
}
sb.
append
(buf
);
Message
msg
=
mHandler
.
obtainMessage
(SHOW_TXT
);
msg
.
obj
=
CharBuffer
.
wrap
(sb.
toString
());
mHandler
.
sendMessage
(msg
);
}
}
}
}
private
class
TextShowTask
extends
AsyncTask
<
Object
,
Object
,
Object
>
{
@Override
protected
void
onPostExecute
(Object
param
) {
Log
.
d
(LOG_TAG
,
"Send broadcast"
);
}
@Override
protected
Object
doInBackground
(Object
...
params
) {
Uri
uri
=
(Uri
) params
[
0
];
try
{
showText
(uri
);
}
catch
(Exception
e
) {
Log
.
d
(LOG_TAG
,
"Exception"
,
e
);
}
return
null
;
}
}
@Override
public
void
onPreOnDraw
(int
bottom
) {
mCurBottom
=
bottom
-
mScrollView
.
getHeight
();
if
(mHaveNewText
&&
!
TextUtils
.
isEmpty
(mStringShow
)) {
mHaveNewText
=
false
;
Message
msg
=
mHandler
.
obtainMessage
(SHOW_TXT
);
msg
.
obj
=
CharBuffer
.
wrap
(mStringShow
);
mHandler
.
sendMessage
(msg
);
}
}
}
这个为了得到TextView底部的位置而扩展了TextView类:
import
android.content.Context
;
import
android.graphics.Canvas
;
import
android.util.AttributeSet
;
import
android.widget.TextView
;
public class SwanTextView extends TextView {
private
int
mPreBottom
=
-
1
;
private
OnTextChangedListener
textChangedListener
=
null
;
public
SwanTextView
(Context
context
) {
super
(context
);
}
public
SwanTextView
(Context
context
,
AttributeSet
attrs
) {
super
(context
,
attrs
);
}
public
SwanTextView
(Context
context
,
AttributeSet
attrs
,
int
defStyle
) {
super
(context
,
attrs
,
defStyle
);
}
@Override
protected
void
onDraw
(Canvas
canvas
) {
if
(mPreBottom
!=
getBottom
()) {
mPreBottom
=
getBottom
();
if
(textChangedListener
!=
null
)
textChangedListener
.
onPreOnDraw
(mPreBottom
);
}
super
.
onDraw
(canvas
);
}
public
static
interface
OnTextChangedListener
{
public
void
onPreOnDraw
(int
bottom
);
}
public
void
setOnTextChangedListener
(OnTextChangedListener
listener
) {
textChangedListener
=
listener
;
}
}
这个就是资源文件了:
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
android:id= "@+id/text_show_linear" android:layout_width= "wrap_content"
android:layout_height= "wrap_content" >
<ScrollView android:id= "@+id/text_show_scroll"
android:layout_width= "fill_parent" android:layout_height= "fill_parent" >
<net.wangliping.filemanager.SwanTextView
android:id= "@+id/text_show" android:layout_width= "fill_parent"
android:layout_height= "wrap_content" android:scrollbars= "none" >
</net.wangliping.filemanager.SwanTextView>
</ScrollView>
</LinearLayout>
代码不成熟,见笑了
发表评论
-
<转载>实现android的AES加密技术
2012-01-06 17:29 612原文地址:实现android的AES加密技术作者:大牛 ... -
致国内提供安卓应用内容服务商的一封信
2011-12-31 11:07 161安卓应用内容服务商是指提供安卓客户端下载,通过安卓客户端可以访 ... -
致国内1000万中小安卓应用开发者的一封信
2011-12-30 14:53 258基于安卓应用持久健康的发展,以及保护依赖广告嵌入来获得收入的广 ... -
致国内移动广告平台、广告聚合平台及统计平台的一封信
2011-12-30 14:49 975基于安卓应用持久健康的发展,以及保护依赖广告嵌入来获得收入的广 ... -
致国内提供安卓应用内容服务商的一封信
2011-12-30 14:29 585安卓应用内容服务商是指提供安卓客户端下载,通过安卓客户端可以访 ... -
致国内1000万中小安卓应用开发者的一封信
2011-12-30 14:18 4基于安卓应用持久健康的发展,以及保护依赖广告嵌入来获得收入的广 ... -
致国内移动广告平台、广告聚合平台及统计平台的一封信
2011-12-30 14:13 3基于安卓应用持久健康的发展,以及保护依赖广告嵌入来获得收入的广 ... -
<转载>andriod 断点续传和下载原理分析
2011-12-21 21:48 892最近做一个文件上传和下载的应用对文件上传和下载进行了一个完整的 ... -
《转载》Android大TXT文本文档读取(续)
2011-12-20 10:32 1073原文地址:http://wangliping.net/read ... -
文件 批量重命名
2011-12-19 20:59 871前几天要处理一些图片资料,从看到有人提供了一个批处理的方法,但 ... -
发布应用的一点小感想(一)
2011-12-09 18:08 725<!-- @pa ... -
博客文章搬家成功
2011-12-08 11:33 665博客文章从csdn上搬家成功了~~ 不过博客分类没有导入进来 ... -
android中嵌入广告的小发现
2011-12-07 18:03 972虽是个新手,前段时间 ... -
android用于打开各种文件的intent,包括以下文件PDF,PPT,WORD,EXCEL,CHM,HTML,TEXT,AUDIO,VIDEO
2011-12-07 17:26 2085以下代码未经测试。但是有我想找的,先贴过来,慢慢了解~~ i ... -
移动互联网个体户
2011-12-06 11:07 1091在网上查了查,现在 还没有人提出过移动互联网个体户这个概念,以 ... -
tabhost里解决按键事件捕获的问题
2011-12-03 16:58 3864这几天参照好多人的代码,改造了一个小程序,咱也使用一下TabH ... -
Android中Fragment的应用
2011-11-21 18:11 765http://blog.sina.com.cn/s/blog_ ... -
在webview中访问互联网应用,碰到弹出窗口怎么办?
2011-11-21 15:12 8666webview加载了一个页面,页面里点某一个button时候弹 ...
相关推荐
android 写了一个工具类实现txt文件保存和读取
彻底解决android读取中文txt的乱码(自动判断文档类型并转码)
该控件一款专业的 Android PDF 控件,用于在 Android 手机应用程序中创建、读取、操作和转换 PDF 文档,运行环境无需安装 Adobe Acrobat 或其他任何第三方组件。支持的功能如下: PDF 文档安全性设置,画文本、图片...
免费Android PDF 控件,用于在 Android 手机应用程序中创建、读取、操作和转换 PDF 文档,运行环境无需安装 Adobe Acrobat 或其他任何第三方组件。支持的功能如下: PDF 文档安全性设置,画文本、图片、形状、条形码...
android sdk中文文档 资源是Android应用程序不可或缺的部分。一般而言,资源是你想包含和引入到应用程序里面的一些外部元素,比如图片、音频、视频、文本字符串、布局、主题等。每个Android应用程序包含一个资源...
这是一个简单的书本阅读器,优势在于可以读取大容量的txt文档
import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Align; public class BookPageFactory { //...
Android版植物大战僵尸源文件,内含技术文档,说明了实现细节。各个包的说明: com.tarena.monster 主要是用于游戏流程控制包 com.tarena.monster.actor 主要存放所有角色(精灵)初始化的类 ...
(2) ioc模块:android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。 (3) 数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。 (4) http模块:通过...
Android SDK tools included in Android 1.1 SDK, Release 1. Supported Supported Supported Supported Operating Operating Operating Operating Systems Systems Systems Systems • Windows XP (32-bit) or ...
第1章 掀起你的盖头来——初识Android 1.1 认识Android 1.2 Android的背景 1.2.1 Android的历史 1.2.2 Android的发展 1.3 我的Android我做主 1.3.1 开发基于Android平台的应用 1.3.2 参加Android开发者大赛 1.3.3 ...
本书内容上涵盖了用android开发的大部分场景,从android基础介绍、环境搭建、sdk介绍、market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个android平台下的完整综合实例及源代码分析,...
第1章 掀起你的盖头来——初识Android 1.1 认识Android 1.2 Android的背景 1.2.1 Android的历史 1.2.2 Android的发展 1.3 我的Android我做主 1.3.1 开发基于Android平台的应用 1.3.2 参加Android开发者大赛 1.3.3 ...
第1章 掀起你的盖头来——初识Android 1.1 认识Android 1.2 Android的背景 1.2.1 Android的历史 1.2.2 Android的发展 1.3 我的Android我做主 1.3.1 开发基于Android平台的应用 1.3.2 参加Android开发者大赛 1.3.3 ...
1章 掀起你的盖头来——初识Android. 1 1.1 认识Android 1 1.2 Android的背景 2 1.2.1 Android的历史 2 1.2.2 Android的发展 2 1.3 我的Android我做主 2 1.3.1 开发基于Android平台的应用 3 ...
Java源码,Android源码,植物大战僵尸 Android版植物大战僵尸源文件,内含技术文档,说明了实现细节。各个包的说明: ... ... 定义了很多boolean值用来开关游戏中各种流程;... 读取文本文件,确定怪物出场顺序。
是PDF文档创建和处理组件,它使您的Android应用程序无需使用任何其他第三方应用程序即可读取,编写和处理PDF文档。 它还允许您创建表单并管理嵌入PDF文档中的表单字段。 目录 描述 一系列Java示例,可帮助您学习...
FolioReader-Android是用Java和Kotlin编写的EPUB阅读器。 特征 自定义字体 自定义文字大小 主题/白天模式/夜间模式 文字突出显示 列出/编辑/删除突出显示 处理内部和外部链接 风景素描 剩余阅读时间/剩余...
实现根据TXT文本存储的微信账号,无需...手机新建一个phone.txt文档放在text文件夹下,文档里面每一行对应一个微信号就可以,你在WXAutoClickAccessibilityService里面第39行就是读取文档内容的代码,你可以自己修改的