Android(安卓)TTS实现简单阅读器(二)
16lz
2021-01-26
好吧,这是下半部分==,上半部分请看《Android TTS实现简单阅读器(一)》。
3)公共工具
这个也贴出来吧==。 GlobalUtil.java四、阅读器截图 1 )进入画面.png 2 )长按屏幕.png 3 )自带two.txt.png 4 )“浏览… 操作”的截图 浏览...(1).png 浏览...(2).png 浏览...(3).png 五、后记
- /**
- *@brief全局公用类
- *@details各部分公用内容都较少,就丢一起了==。
- */
- publicfinalclassGlobalUtil{
- /**BobLee懒加载:内部类GlobalUtilHolder*/
- staticclassGlobalUtilHolder{
- staticGlobalUtilinstance=newGlobalUtil();
- }
- /**BobLee懒加载:返回GlobalUtil的单例*/
- publicstaticGlobalUtilgetInstance(){
- returnGlobalUtilHolder.instance;
- }
- /**获取窗口默认显示信息*/
- publicDisplaygetDisplay(ContextmContext){
- WindowManagerwm=(WindowManager)mContext
- .getSystemService(Context.WINDOW_SERVICE);
- returnwm.getDefaultDisplay();
- }
- /**动画方式*/
- publicenumAnimMode{
- UP_IN,UP_OUT,DOWN_IN,DOWN_OUT,LEFT_IN,LEFT_OUT,RIGHT_IN,RIGHT_OUT
- };
- /**
- *@brief横移或竖移动画
- *
- *@paramv移动视图
- *@paramanimMode动画方式
- *@paramdurationMillis持续时间
- */
- publicvoidstartTransAnim(Viewv,AnimModeanimMode,longdurationMillis){
- intw=v.getWidth(),h=v.getHeight();//获取移动视图宽高
- floatfromXDelta=0,toXDelta=0,fromYDelta=0,toYDelta=0;
- switch(animMode){
- caseUP_IN:
- fromYDelta=-h;
- break;
- caseUP_OUT:
- toYDelta=-h;
- break;
- caseDOWN_IN:
- fromYDelta=h;
- break;
- caseDOWN_OUT:
- toYDelta=h;
- break;
- caseLEFT_IN:
- fromXDelta=-w;
- break;
- caseLEFT_OUT:
- toXDelta=-w;
- break;
- caseRIGHT_IN:
- fromXDelta=w;
- break;
- caseRIGHT_OUT:
- toXDelta=w;
- break;
- }
- TranslateAnimationtransAnim=newTranslateAnimation(fromXDelta,
- toXDelta,fromYDelta,toYDelta);//位移动画
- transAnim.setDuration(durationMillis);//设置时间
- v.startAnimation(transAnim);//开始动画
- }
- /**
- *@briefInputStream转为String
- *
- *@paramis输入流
- *@paramencoding编码方式
- *@return字符串结果
- *@throwsUnsupportedEncodingException不支持的编码
- */
- publicStringis2Str(InputStreamis,Stringencoding)
- throwsUnsupportedEncodingException{
- /*
- *不直接从InputStream里读byte[],再转成String,以避免截断汉字。
- *如utf8一个汉字3字节,用byte[1024]会截断末尾而乱码。
- */
- InputStreamReaderisReader=newInputStreamReader(is,encoding);
- /*以char[]方式读取*/
- StringBufferout=newStringBuffer();
- try{
- char[]b=newchar[4096];//1024*4*2Byte
- for(intn;(n=isReader.read(b))!=-1;){
- out.append(b,0,n);
- }
- returnout.toString();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- return"";
- }
- /**
- *@brief带BOM的文本的FileInputStream转为String,自动判断编码类型
- *
- *@paramfis文件输入流
- *@return字符串结果
- *@throwsUnsupportedEncodingException不支持的编码
- */
- publicStringis2Str(FileInputStreamfis)
- throwsUnsupportedEncodingException{
- //转成BufferedInputStream
- BufferedInputStreambis=newBufferedInputStream(fis);
- //简单判断文本编码
- Stringencoding=getIsEncoding(bis);
- //转成BufferedReader
- BufferedReaderreader=newBufferedReader(newInputStreamReader(bis,
- encoding));
- /*以readLine()方式读取*/
- StringBufferout=newStringBuffer();
- try{
- for(Strings;(s=reader.readLine())!=null;){
- out.append(s);
- out.append("\n");
- }
- returnout.toString();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- return"";
- }
- /**
- *@brief带BOM的文本判断,否则认为GB2312(即ANSI类型的TXT)
- *@details复杂文件编码检测,请googlecpdetector!
- *
- *@paramisInputStream
- *@return编码类型
- *
- *@warningmarkSupported为true时才进行判断,否则返回默认GB2312。
- *\nFileInputStream不支持mark/reset操作;BufferedInputStream支持此操作。
- */
- publicStringgetIsEncoding(InputStreamis){
- Stringcode="GB2312";
- //Log.e("is.markSupported()","=="+is.markSupported()+"==");
- if(is.markSupported()){//支持mark()
- try{
- is.mark(5);//打个TAG(5>3)
- byte[]head=newbyte[3];
- is.read(head);
- if(head[0]==-1&&head[1]==-2)
- code="UTF-16";
- if(head[0]==-2&&head[1]==-1)
- code="Unicode";
- if(head[0]==-17&&head[1]==-69&&head[2]==-65)
- code="UTF-8";
- is.reset();//返回TAG
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- returncode;
- }
- }
直接读大文本,后果自负啊。(没做控制呢T^T)
ps:应用的入口图标 ,可爱吧^^。
更多相关文章
- android中自定义属性三步骤
- 2018-06-15 Android加载GIF图片的两种方式
- Android(安卓)GridView等控件的属性集合
- 习题二
- 安卓开发----TextView控件属性列表
- android 创建bitmap的多种方式
- Android读取Assert文件夹下txt文本并变为String的方法
- Android横竖屏切换正确实现方式
- (六)Android中的EditText组件