- 浏览: 242885 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
你的样子越来越美:
楼主是来炫耀的。
java图片处理解决方案 -
di1984HIT:
关注一下。
hypertable安装 -
di1984HIT:
katta好久不更新了。
Katta源码分析(1)--显示节点 -
tracyitbird:
谢谢博主,很好说的很明白。不过一般bin的环境变量已经配置好了 ...
解决Hadoop报Name node is in safe mode 错误 -
凌寒_微雨:
总结的很好
android 笔记——listView应用
由于现在TXT文本很多,特别是好多小说也是以这个文件格式出现,毕竟这个格式所占用不必要的空间比较小。像我这样的人就非常喜欢在手机上看小说,经常下载好多的TXT格式小说存到手机上以便空闲时候看。于是乎也试图做了一下如何在Android上实现看大文本的txt文档。
虽然现在类似的应用还真不少,不过个人看到的基本不公布源码,而公布源码的基本都是不能看大文本的,所以自己去实现了一下。现在只是粗略实现了,实现方法是每次当滑动到屏幕底端时,从文件读2048字节出来显示到屏幕上。到屏幕底端再读是为了不给用户有刷屏的感觉,使用起来感觉不到只读了2048字节出来,比较流畅。现在由于只是试验流畅性,所以只写了向下浏览的,而没有写往回读,也就是说往回翻是无效的。
废话不多说,代码是王道。这个是主文件:
这个为了得到TextView底部的位置而扩展了TextView类:
这个就是资源文件了:
虽然现在类似的应用还真不少,不过个人看到的基本不公布源码,而公布源码的基本都是不能看大文本的,所以自己去实现了一下。现在只是粗略实现了,实现方法是每次当滑动到屏幕底端时,从文件读2048字节出来显示到屏幕上。到屏幕底端再读是为了不给用户有刷屏的感觉,使用起来感觉不到只读了2048字节出来,比较流畅。现在由于只是试验流畅性,所以只写了向下浏览的,而没有写往回读,也就是说往回翻是无效的。
废话不多说,代码是王道。这个是主文件:
package net.wangliping.filemanager; 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类:
package net.wangliping.filemanager; 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; } }
这个就是资源文件了:
<?xml version="1.0" encoding="utf-8"?> <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 -- 笔记
2011-08-26 14:32 0System.out.println(tm.getDevice ... -
android 笔记 --- android:paddingLeft与android:layout_marginLeft的区别
2011-05-31 15:47 3378当按钮分别设置以上两个属性时,得到的效果是不一样的。 and ... -
android 笔记 --- ImageView的属性android:scaleType
2011-05-27 18:40 6394ImageView的属性android:scaleType,即 ... -
android 笔记 --- 位图和矢量图区别
2011-05-27 11:29 4987位图和矢量图是计算机 ... -
android 笔记 --- 适配不同分辨率的Android手机
2011-05-27 11:25 3183一:不同的layout Android手机屏幕大小不一,有4 ... -
android 笔记 --- Android系统中SD卡各文件夹功能详解
2011-05-24 14:46 2706对于初次使用Android系统 ... -
android 笔记 --- Android的PackageManager和ActivityManager的功能简介
2011-05-24 14:40 1856Android系统为应用管理功能提供了大量的API。根据功能的 ... -
android 笔记 --- InputFilter实现EditText文本输入过滤器
2011-05-23 16:19 10194EditText是Android的文本输入框控件,这地球人应该 ... -
android 笔记 --- 让Android的输入框与文本框带滚动条ScrollView
2011-05-23 16:18 3621我们都知道EditText与TextView是Android的 ... -
android 笔记 --- Android自动判断输入是电话,网址或者Email的方法—-Linkify的应用
2011-05-23 16:16 3917本节要讲的是,当我们在一个EditText输入电话或者网址还是 ... -
android 笔记 --- Android SimpleAdapter
2011-05-23 16:12 1973列表(ListView)、表格(GridView),这在手机应 ... -
android 笔记 --- Android安全机制之设备管理
2011-05-23 16:08 1905Andoid安全机制包括两个层次:系统层和应用层。应用层的安全 ... -
android 笔记 --- Android-图片透明度处理代码
2011-05-23 16:07 2273/** * 图片透明度处理 * * @pa ... -
android 笔记 --- 自定义Android主题风格theme.xml方法
2011-05-23 15:51 3008在Android中可以通过自定义主题风格方式来实现个性化以及复 ... -
android 笔记 --- Android中Menu应用
2011-05-23 15:48 1190Android menu是Android开发中经常使用的,下面 ... -
android 笔记 --- Android中Handler,Looper,HandlerThread
2011-05-23 15:46 1867Handler提供了一种消息机制用于线程间的通信。 默认情况下 ... -
android 笔记 --- Android Shadow 阴影制作
2011-05-23 15:41 5665在Android View 中, 要制作阴影, 可以利用 P ... -
android 笔记 --- 分辨率大全
2011-05-23 15:40 1484对于Android游戏开发我们 ... -
android 笔记 --- Android Bitmap 建立或取得的方法
2011-05-23 15:12 2150Android 要建立或取得Bitmap 的方式, 目前, ... -
android 笔记 --- Bitmap与Drawable转换
2011-05-23 14:58 1713android在处理一写图片资源的时候,会进行一些类型的转换, ...
相关推荐
android笔记-10.09
新版Android开发教程&笔记--基础入门一 新版Android开发教程&笔记--基础入门二 新版Android开发教程&笔记三--环境搭建与解析 新版Android开发教程&笔记四--Dalvik ADB 新版Android开发教程+笔记五--模拟器、应用1、2...
go学习笔记-文档
新版Android开发教程&笔记--基础入门一.pdf 新版Android开发教程&笔记--基础入门二.pdf 新版Android开发教程&笔记三--环境搭建与解析.pdf 新版Android开发教程&笔记四--Dalvik ADB.pdf 新版Android开发教程+笔记五--...
4、Android04--Android服务 5、Android05--Android服务通信 6、Android06--Android广播接收器 7、Android07--Android日志系统 8、Android08--Android权限系统 用户界面 9、Android09--Fragment初探 10、Android09--...
Android开发笔记---ListView
Android笔记- 从DEX档案格式看Dalvik的运作.docx
VC笔记-如何从txt文本中读写结构体数据 VC笔记-如何从txt文本中读写结构体数据
新版Android开发教程及笔记-完整版
Android自学笔记-16-任务栈源代码
android学习笔记--clip.pdf
http://blog.csdn.net/loveqRc/article/details/54169666 Android学习笔记--Gson笔记
Android学习笔记-Activity篇 Contents Android学习笔记-Activity篇 1 一、activity创建: 1 二、在manifest.xml中声明activity: 1 三、启动activity 1 3.1 启动不带返回结果的Activity 1 3.2 启动带有返回结果的...
Android自学笔记-11-listview简单例子
android学习笔记--clip参照.pdf
android学习笔记-clip.pdf
这是一个关于android学习的笔记,记载了常用的dialog,数据存储,动画,广播等东西,非常适用于初学者。
Android学习笔记 > 十年生死两茫茫,不思量,自难忘,华年短暂,陈辞岁月悠悠伤, > 满腔热血已芜荒,展未来,后生强,战战兢兢,如履薄冰心彷徨, > 青丝化雪、鬓角成霜,已是英雄迟暮,人生怎慷慨激昂? 目录 ...
Android开发教程 笔记--基础UI编程