好吧,这是下半部分==,上半部分请看《Android TTS实现简单阅读器(一)》。

3)公共工具

这个也贴出来吧==。 GlobalUtil.java
        
  1. /**
  2. *@brief全局公用类
  3. *@details各部分公用内容都较少,就丢一起了==。
  4. */
  5. publicfinalclassGlobalUtil{
  6. /**BobLee懒加载:内部类GlobalUtilHolder*/
  7. staticclassGlobalUtilHolder{
  8. staticGlobalUtilinstance=newGlobalUtil();
  9. }
  10. /**BobLee懒加载:返回GlobalUtil的单例*/
  11. publicstaticGlobalUtilgetInstance(){
  12. returnGlobalUtilHolder.instance;
  13. }
  14. /**获取窗口默认显示信息*/
  15. publicDisplaygetDisplay(ContextmContext){
  16. WindowManagerwm=(WindowManager)mContext
  17. .getSystemService(Context.WINDOW_SERVICE);
  18. returnwm.getDefaultDisplay();
  19. }
  20. /**动画方式*/
  21. publicenumAnimMode{
  22. UP_IN,UP_OUT,DOWN_IN,DOWN_OUT,LEFT_IN,LEFT_OUT,RIGHT_IN,RIGHT_OUT
  23. };
  24. /**
  25. *@brief横移或竖移动画
  26. *
  27. *@paramv移动视图
  28. *@paramanimMode动画方式
  29. *@paramdurationMillis持续时间
  30. */
  31. publicvoidstartTransAnim(Viewv,AnimModeanimMode,longdurationMillis){
  32. intw=v.getWidth(),h=v.getHeight();//获取移动视图宽高
  33. floatfromXDelta=0,toXDelta=0,fromYDelta=0,toYDelta=0;
  34. switch(animMode){
  35. caseUP_IN:
  36. fromYDelta=-h;
  37. break;
  38. caseUP_OUT:
  39. toYDelta=-h;
  40. break;
  41. caseDOWN_IN:
  42. fromYDelta=h;
  43. break;
  44. caseDOWN_OUT:
  45. toYDelta=h;
  46. break;
  47. caseLEFT_IN:
  48. fromXDelta=-w;
  49. break;
  50. caseLEFT_OUT:
  51. toXDelta=-w;
  52. break;
  53. caseRIGHT_IN:
  54. fromXDelta=w;
  55. break;
  56. caseRIGHT_OUT:
  57. toXDelta=w;
  58. break;
  59. }
  60. TranslateAnimationtransAnim=newTranslateAnimation(fromXDelta,
  61. toXDelta,fromYDelta,toYDelta);//位移动画
  62. transAnim.setDuration(durationMillis);//设置时间
  63. v.startAnimation(transAnim);//开始动画
  64. }
  65. /**
  66. *@briefInputStream转为String
  67. *
  68. *@paramis输入流
  69. *@paramencoding编码方式
  70. *@return字符串结果
  71. *@throwsUnsupportedEncodingException不支持的编码
  72. */
  73. publicStringis2Str(InputStreamis,Stringencoding)
  74. throwsUnsupportedEncodingException{
  75. /*
  76. *不直接从InputStream里读byte[],再转成String,以避免截断汉字。
  77. *如utf8一个汉字3字节,用byte[1024]会截断末尾而乱码。
  78. */
  79. InputStreamReaderisReader=newInputStreamReader(is,encoding);
  80. /*以char[]方式读取*/
  81. StringBufferout=newStringBuffer();
  82. try{
  83. char[]b=newchar[4096];//1024*4*2Byte
  84. for(intn;(n=isReader.read(b))!=-1;){
  85. out.append(b,0,n);
  86. }
  87. returnout.toString();
  88. }catch(IOExceptione){
  89. e.printStackTrace();
  90. }
  91. return"";
  92. }
  93. /**
  94. *@brief带BOM的文本的FileInputStream转为String,自动判断编码类型
  95. *
  96. *@paramfis文件输入流
  97. *@return字符串结果
  98. *@throwsUnsupportedEncodingException不支持的编码
  99. */
  100. publicStringis2Str(FileInputStreamfis)
  101. throwsUnsupportedEncodingException{
  102. //转成BufferedInputStream
  103. BufferedInputStreambis=newBufferedInputStream(fis);
  104. //简单判断文本编码
  105. Stringencoding=getIsEncoding(bis);
  106. //转成BufferedReader
  107. BufferedReaderreader=newBufferedReader(newInputStreamReader(bis,
  108. encoding));
  109. /*以readLine()方式读取*/
  110. StringBufferout=newStringBuffer();
  111. try{
  112. for(Strings;(s=reader.readLine())!=null;){
  113. out.append(s);
  114. out.append("\n");
  115. }
  116. returnout.toString();
  117. }catch(IOExceptione){
  118. e.printStackTrace();
  119. }
  120. return"";
  121. }
  122. /**
  123. *@brief带BOM的文本判断,否则认为GB2312(即ANSI类型的TXT)
  124. *@details复杂文件编码检测,请googlecpdetector!
  125. *
  126. *@paramisInputStream
  127. *@return编码类型
  128. *
  129. *@warningmarkSupported为true时才进行判断,否则返回默认GB2312。
  130. *\nFileInputStream不支持mark/reset操作;BufferedInputStream支持此操作。
  131. */
  132. publicStringgetIsEncoding(InputStreamis){
  133. Stringcode="GB2312";
  134. //Log.e("is.markSupported()","=="+is.markSupported()+"==");
  135. if(is.markSupported()){//支持mark()
  136. try{
  137. is.mark(5);//打个TAG(5>3)
  138. byte[]head=newbyte[3];
  139. is.read(head);
  140. if(head[0]==-1&&head[1]==-2)
  141. code="UTF-16";
  142. if(head[0]==-2&&head[1]==-1)
  143. code="Unicode";
  144. if(head[0]==-17&&head[1]==-69&&head[2]==-65)
  145. code="UTF-8";
  146. is.reset();//返回TAG
  147. }catch(IOExceptione){
  148. e.printStackTrace();
  149. }
  150. }
  151. returncode;
  152. }
  153. }
四、阅读器截图 1 )进入画面.png

2 )长按屏幕.png

3 )自带two.txt.png

4 )“浏览… 操作”的截图

浏览...(1).png

浏览...(2).png

浏览...(3).png 五、后记

直接读大文本,后果自负啊。(没做控制呢T^T)

ps:应用的入口图标 ,可爱吧^^。

更多相关文章

  1. android中自定义属性三步骤
  2. 2018-06-15 Android加载GIF图片的两种方式
  3. Android(安卓)GridView等控件的属性集合
  4. 习题二
  5. 安卓开发----TextView控件属性列表
  6. android 创建bitmap的多种方式
  7. Android读取Assert文件夹下txt文本并变为String的方法
  8. Android横竖屏切换正确实现方式
  9. (六)Android中的EditText组件

随机推荐

  1. android中xml文件的使用详解
  2. android:ellipsize省略文字用法
  3. Android中android:visibility的3中属性的
  4. Android中drawable各个属性讲解
  5. Android studio 启动问题,错误
  6. android 胡言乱语 1 android basic
  7. Android(安卓)在TextView 中显示图片的4
  8. 学习Android之-----------------------An
  9. Android Lint & Checkstyle
  10. Android 启动栈管理方式 (二)