package com.dotcool.view; /** * 书籍阅读 * author Lee * date 2012/4/18 */ import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.youmi.android.banner.AdSize; import net.youmi.android.banner.AdView; import net.youmi.android.banner.AdViewLinstener; import net.youmi.android.smart.SmartBannerManager; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.Settings; import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup.LayoutParams; import android.view.Window; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; import com.dotcool.R; import com.dotcool.bll.BookPageFactory; import com.dotcool.bll.DbDataOperation; import com.dotcool.bll.DbTags; import com.dotcool.bll.PageWidget; import com.dotcool.util.AppUtil; import com.dotcool.util.ArrayUtil; import com.dotcool.util.BgUtil; import com.dotcool.util.MathUtil; import com.dotcool.util.TimeUtil; import com.speakit.tts.foc.instance.AndroidVoiceInstance; import com.speakit.tts.foc.instance.SettingTTSActivity; import android.view.Menu; import android.view.MenuItem; public class BookReadActivity extends Activity { private PageWidget mPageWidget; Bitmap mCurPageBitmap, mNextPageBitmap; Canvas mCurPageCanvas, mNextPageCanvas; public static BookPageFactory pagefactory; int screenWidth ,screenHeight; int bookId; String bookPath,bookName,bookProgress; String content; private int bookBeginPosition; //db private ContentResolver resolver; //tabMenu public final static int TITLE_USING_OFTEN = 0; public final static int TITLE_TOOLS = 1; public final static int MENU_FONT_SIZE = 0; public final static int MENU_READ_THEME = 1; public final static int MENU_FLIP_OVER = 2; public final static int MENU_SEARCH = 3; public final static int MENU_AUDIO_BOOK = 0; public final static int MENU_SETTING = 1; public final static int MENU_BOOK_MARK = 2; public final static int MENU_SHARE = 3; TabMenu.MenuBodyAdapter []bodyAdapter=new TabMenu.MenuBodyAdapter[2]; TabMenu.MenuTitleAdapter titleAdapter; TabMenu tabMenu; int selTitle=0; PopupWindow popupWindow; //定义每项分页栏的内容 String[] title1BodyName , title2BodyName; int[] title1BodyIcon , title2BodyIcon; private SeekBar sbFontSize,sbBrightnessControl,sbJump; //menu jump private TextView tvCurrentProgress ; private ImageButton ibtnJumpUp,ibtnJumpDown; //flip over private Handler readHandler = new Handler(); private FlipOverRunnable flipOverRunnable = new FlipOverRunnable(); private boolean isRead = true; //menu custom theme private SeekBar redForegroundSeekBar,greenForegroundSeekBar,blueForegroundSeekBar, redBackgroundSeekBar,greenBackgroundSeekBar,blueBackgroundSeekBar; int currentProgress; private TextView fontColorTxt,backgroundColorTxt,themeStyleTxt ; private int redForegoundProgress,greenForegroundProgress,blueForegroundProgress, redBackgoundProgress,greenBackgroundProgress,blueBackgroundProgress; private String foreColor,foreR="00",foreG="00",foreB="00",backColor,backR="00",backG="00",backB="00"; private int currentForeColorId,currentBackColorId; //chapter Pattern pattern = Pattern.compile("第{1}.+章{1}.+"); Matcher matcher; List<String> chapterName = new ArrayList<String>(); List<Integer> chapterBeginPositions = new ArrayList<Integer>(); Vector<String> lines; int chapterNum = 0; private AlertDialog chapterDialog; private String currentChapterName = "wu"; private int currentBeginPosition = 0; private Context context; private StringBuilder src; Handler chapterHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Log.d("dots", ""+msg.what); if(msg.what == 0) { // updateView(); showChapterDialog(); } else if(msg.what == 1) { chapterDialog.setMessage("正在提取章节,请稍后...\n已发现章节:["+chapterNum+"] "+currentChapterName); } else if(msg.what == 2) { mPageWidget.invalidate(); }else if(msg.what==3){ SharedPreferences localSharedPreferences =context.getSharedPreferences("audio", 0); if(localSharedPreferences.getInt("flag", 0)==1){ src=new StringBuilder(); for(String item:pagefactory.getM_lines()){ src.append(item); } AndroidVoiceInstance.Instance().playVoiceString(BookReadActivity.this, src.toString()); } } } }; //pre and next chapter private String currentChapter; private int currentChapterIndex; private boolean preOrNext = true; Handler preHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); for(int i=0;i<chapterName.size();i++) { if(chapterName.get(i).equals(currentChapter)) { currentChapterIndex = i; Log.i("chapter"+i+"-->",currentChapterIndex+""); break; } } if(currentChapterIndex==0) { new AlertDialog.Builder(BookReadActivity.this).setTitle("提示").setMessage("已是第一章!").setPositiveButton("确定", null).show(); } else { pagefactory.setM_mbBufBegin(chapterBeginPositions.get(currentChapterIndex-1)); updateView(); } } }; Handler nextHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); for(int i=0;i<chapterName.size();i++) { Log.i("name"+i,chapterName.get(i)); if(chapterName.get(i).equals(currentChapter)) { currentChapterIndex = i; Log.i("chapter"+i+"-->",currentChapterIndex+""); break; } } if(currentChapterIndex==(chapterName.size()-1)) { new AlertDialog.Builder(BookReadActivity.this).setTitle("提示").setMessage("已是最后一章!").setPositiveButton("确定", null).show(); } else { pagefactory.setM_mbBufBegin(chapterBeginPositions.get(currentChapterIndex+1)); updateView(); } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); resolver = getContentResolver(); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.act_reader); LinearLayout adLayout = (LinearLayout) findViewById(R.id.adLayout); AdView adView = new AdView(this, AdSize.FIT_SCREEN); adLayout.addView(adView); adView.setAdListener(new AdViewLinstener() { public void onSwitchedAd(AdView arg0) { Log.i("YoumiSample", "广告条切换"); } public void onReceivedAd(AdView arg0) { Log.i("YoumiSample", "请求广告成功"); } public void onFailedToReceivedAd(AdView arg0) { Log.i("YoumiSample", "请求广告失败"); } }); SmartBannerManager.init(this); // 调用展示飘窗 SmartBannerManager.show(BookReadActivity.this); mPageWidget = (PageWidget)findViewById(R.id.pagewidget); AndroidVoiceInstance.Instance().initData(BookReadActivity.this, "000000"); DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); screenWidth = dm.widthPixels; screenHeight = dm.heightPixels-AppUtil.dip2px(this, 50); context=this; mCurPageBitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888); mNextPageBitmap = Bitmap .createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888); mCurPageCanvas = new Canvas(mCurPageBitmap); mNextPageCanvas = new Canvas(mNextPageBitmap); pagefactory = new BookPageFactory(screenWidth, screenHeight); SharedPreferences localSharedPreferences =context.getSharedPreferences("audio", 0); int tmp=localSharedPreferences.getInt("theme", 0); int[] bgs = new int[]{R.drawable.read_bg_1,R.drawable.read_bg_2,R.drawable.read_bg_3,R.drawable.read_bg_6,R.drawable.read_bg_7}; pagefactory.setBgBitmap(BgUtil.getSuitableBg(this,screenWidth,screenHeight,R.drawable.read_bg_3)); pagefactory.setM_backColor(0x000000); pagefactory.setBgBitmap(BgUtil.getSuitableBg(BookReadActivity.this,screenWidth,screenHeight,bgs[tmp])); try { if(getIntent().getExtras().getInt("net")==1){ //网上下载构建 content=getIntent().getExtras().getString("net_content"); bookPath=AppUtil.saveTxt(content, this.getFilesDir().getAbsolutePath()); bookProgress="onlyRead"; bookId = getIntent().getExtras().getInt("net_book_id"); bookBeginPosition=0; pagefactory.openbook(bookPath); }else{ //一般构建 bookPath = getIntent().getExtras().getString(DbTags.FIELD_BOOK_PATH); bookName = getIntent().getExtras().getString(DbTags.FIELD_BOOK_NAME); bookId = getIntent().getExtras().getInt(DbTags.FIELD_BOOK_ID); bookProgress = getIntent().getExtras().getString(DbTags.FIELD_BOOK_PROGRESS); bookBeginPosition = getIntent().getExtras().getInt(DbTags.FIELD_BOOK_BEGIN_POSITION); pagefactory.openbook(bookPath); } if(bookProgress==null||bookProgress.equals("onlyRead")) { pagefactory.Draw(mCurPageCanvas); } else if(bookProgress.equals("begin")) { pagefactory.setM_mbBufBegin(getIntent().getIntExtra("begin", 0)); updateView(); System.out.println("2"); } else { pagefactory.setM_mbBufBegin(bookBeginPosition); System.out.println("3"); updateView(); } } catch (IOException e1) { e1.printStackTrace(); Toast.makeText(this, "电子书不存在!!!", Toast.LENGTH_SHORT).show(); } mPageWidget.setBitmaps(mCurPageBitmap, mCurPageBitmap); mPageWidget.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent e) { boolean ret=false; if(popupWindow==null||!popupWindow.isShowing()) { if (v == mPageWidget) { if (e.getAction() == MotionEvent.ACTION_DOWN) { mPageWidget.abortAnimation(); mPageWidget.calcCornerXY(e.getX(), e.getY()); pagefactory.Draw(mCurPageCanvas); if (mPageWidget.DragToRight()) { try { pagefactory.prePage(); } catch (IOException e1) { e1.printStackTrace(); } if(pagefactory.isfirstPage()) { // Toast.makeText(BookReadActivity.this, "已到第一页!", 200).show(); return false; } pagefactory.Draw(mNextPageCanvas); chapterHandler.sendEmptyMessage(3); } else { try { pagefactory.nextPage(); } catch (IOException e1) { e1.printStackTrace(); } if(pagefactory.islastPage()) { // Toast.makeText(BookReadActivity.this, "已到最后一页!", 200).show(); return false; } pagefactory.Draw(mNextPageCanvas); chapterHandler.sendEmptyMessage(3); } mPageWidget.setBitmaps(mCurPageBitmap, mNextPageBitmap); } ret = mPageWidget.doTouchEvent(e); return ret; } } return false; } }); //设置分页栏的标题 titleAdapter = new TabMenu.MenuTitleAdapter(this, new String[] { "常用", "工具",}, 16, 0xFF222222,Color.LTGRAY,Color.BLACK); //定义每项分页栏的内容 title1BodyName = new String[] { "字体", "主题","滚动","搜索"}; title1BodyIcon = new int[] { R.drawable.menu_fontsize,R.drawable.menu_extract,R.drawable.menu_play,R.drawable.menu_search}; title2BodyName = new String[] { "朗诵","设置", "书签", "分享"}; title2BodyIcon = new int[] { R.drawable.menu_play, R.drawable.menu_setting, R.drawable.menu_bookmark, R.drawable.menu_share}; bodyAdapter[0]=new TabMenu.MenuBodyAdapter(this,title1BodyName,title1BodyIcon,12, 0xFF000000); bodyAdapter[1]=new TabMenu.MenuBodyAdapter(this,title2BodyName,title2BodyIcon,12, 0xFF000000); tabMenu=new TabMenu(this, new TitleClickEvent(), new BodyClickEvent(), titleAdapter, 0xFFFFFFFF,//TabMenu的背景颜色 R.style.PopupAnimation);//出现与消失的动画 tabMenu.update(); tabMenu.setTitleSelect(0); tabMenu.SetBodyAdapter(bodyAdapter[0]); SharedPreferences.Editor localEditor = context.getSharedPreferences("AndroidVoice", 0).edit(); localEditor.putInt("isUpdate", 0); localEditor.commit(); } class TitleClickEvent implements OnItemClickListener { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { selTitle=arg2; tabMenu.setTitleSelect(arg2); tabMenu.SetBodyAdapter(bodyAdapter[arg2]); } } class BodyClickEvent implements OnItemClickListener ,View.OnClickListener { MySeekBarChangedListener seekBarChangedListener = new MySeekBarChangedListener(); //Bg Drawable int[] bgs = new int[]{R.drawable.read_bg_1,R.drawable.read_bg_2,R.drawable.read_bg_3,R.drawable.read_bg_6,R.drawable.read_bg_7}; int[] styles = new int[]{R.drawable.style01,R.drawable.style02,R.drawable.style03,R.drawable.style06,R.drawable.style07}; String[] styleName = new String[]{"羊皮纸","粉红回忆","蓝色幻想","咖啡时光","水墨江南"}; GridView gvReadTheme; //search EditText etSearchContent; ImageButton ibtnSearch,ibtnSearchBack,ibtnSearchForward,ibtnSearchClear; public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { tabMenu.setBodyClick(position,Color.GRAY); if(selTitle==TITLE_USING_OFTEN) { if(position==MENU_FONT_SIZE) { LinearLayout fontSizeView = null; if(fontSizeView==null) fontSizeView = (LinearLayout)getLayoutInflater().inflate(R.layout.fontsize_view, null); showPopupWindowAtBottom(fontSizeView,LayoutParams.FILL_PARENT, 100, Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM,0,0); popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_listview)); sbFontSize = (SeekBar) fontSizeView.findViewById(R.id.fontSizeProgress); sbFontSize.setProgress(pagefactory.getM_fontSize()); sbFontSize.setOnSeekBarChangeListener(seekBarChangedListener); } else if(position==MENU_READ_THEME) { LinearLayout readThemeView = null; if(readThemeView==null) readThemeView = (LinearLayout)getLayoutInflater().inflate(R.layout.read_theme_view, null); gvReadTheme = (GridView) readThemeView.findViewById(R.id.gvReadTheme); List<Map<String,Integer>> themeList = new ArrayList<Map<String,Integer>>(); for(int i=0;i<styles.length;i++) { Map<String,Integer> themeMap = new HashMap<String,Integer> (); themeMap.put("themeStyle", styles[i]); themeList.add(themeMap); } SimpleAdapter simpleAdapter = new SimpleAdapter(BookReadActivity.this,themeList,R.layout.theme_imageview, new String[]{"themeStyle"},new int[]{R.id.themeStyle}); gvReadTheme.setAdapter(simpleAdapter); gvReadTheme.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { SharedPreferences.Editor localEditor = context.getSharedPreferences("audio", 0).edit(); localEditor.putInt("theme", position); localEditor.commit(); //Toast.makeText(BookReadActivity.this, styleName[position], 50).show(); pagefactory.setM_backColor(0x000000); pagefactory.setBgBitmap(BgUtil.getSuitableBg(BookReadActivity.this,screenWidth,screenHeight,bgs[position])); updateView(); } }); showPopupWindowAtBottom(readThemeView,LayoutParams.FILL_PARENT, 110, Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM,0,0); popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_listview)); popupWindow.setFocusable(true); } else if(position==MENU_FLIP_OVER) { if(isRead) { readHandler.postDelayed(flipOverRunnable, 1000); isRead = false; title1BodyName[MENU_FLIP_OVER] = "停止阅读"; title1BodyIcon[MENU_FLIP_OVER] = R.drawable.menu_stop; //Toast.makeText(BookReadActivity.this, "开始阅读", 500).show(); } else { readHandler.removeCallbacks(flipOverRunnable); isRead = true; title1BodyName[MENU_FLIP_OVER] = "开始阅读"; title1BodyIcon[MENU_FLIP_OVER] = R.drawable.menu_play; //Toast.makeText(BookReadActivity.this, "停止阅读", 500).show(); } bodyAdapter[0]=new TabMenu.MenuBodyAdapter(BookReadActivity.this,title1BodyName,title1BodyIcon,12, 0xFF000000); tabMenu.SetBodyAdapter(bodyAdapter[0]); } else if(position==MENU_SEARCH) { //方式1 Intent intent = new Intent(BookReadActivity.this,SearchActivity.class); intent.putExtra(DbTags.FIELD_BOOK_PATH, bookPath); startActivity(intent); //方式2 // LinearLayout bookSearchView = null; // if(bookSearchView==null) // bookSearchView = (LinearLayout)getLayoutInflater().inflate(R.layout.search_view, null); // etSearchContent = (EditText)bookSearchView.findViewById(R.id.etSearchContent); // ibtnSearch = (ImageButton)bookSearchView.findViewById(R.id.ibtnSearch); // ibtnSearch.setOnClickListener(this); // showPopupWindowAtBottom(bookSearchView,LayoutParams.FILL_PARENT, // 70, Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM,0,pagefactory.getmWidth()); } } else if(selTitle==TITLE_TOOLS) { if(position==MENU_AUDIO_BOOK) { SharedPreferences localSharedPreferences =context.getSharedPreferences("audio", 0); int tmp=0; if (localSharedPreferences.getInt("flag", 0)==0){ tmp=1; chapterHandler.sendEmptyMessage(3); }else{ tmp=0; } SharedPreferences.Editor localEditor = context.getSharedPreferences("audio", 0).edit(); localEditor.putInt("flag", tmp); localEditor.commit(); } else if(position==MENU_BOOK_MARK) { if(bookProgress.equals("onlyRead")) { new AlertDialog.Builder(BookReadActivity.this).setTitle("提示").setMessage("电子书书未添加到书架,无法添加书签").setPositiveButton("确定", null).show(); } else { ContentValues values = new ContentValues(); values.put(DbTags.FIELD_BOOK_ID, bookId); values.put(DbTags.FIELD_BOOK_NAME, bookName); System.out.println("name -->"+bookName); values.put(DbTags.FIELD_BOOK_PATH, bookPath); values.put(DbTags.FIELD_BOOK_MARK_ADD_TIME, TimeUtil.getCurrentTime()); values.put(DbTags.FIELD_BOOK_MARK_PROGRESS, pagefactory.getStrPercent()); values.put(DbTags.FIELD_BOOK_MARK_BEGIN_POSITION, pagefactory.getM_mbBufBegin()); try { pagefactory.nextPage(); } catch (IOException e) { e.printStackTrace(); } Vector<String> details = pagefactory.pageUp(); values.put(DbTags.FIELD_BOOK_MARK_DETAIL, details.get(0)); resolver.insert(Uri.parse(DbTags.URI_TABLE_BOOK_MARK), values); //Toast.makeText(BookReadActivity.this, "添加书签成功", 200).show(); } } else if(position==MENU_SETTING) { //AndroidVoiceInstance.stopVoiceString(); Intent localIntent2 = new Intent(context, SettingTTSActivity.class); startActivity(localIntent2); } else if(position==MENU_SHARE) { Intent intent = new Intent(Intent.ACTION_SEND); // 启动分享发送的属性 intent.setType("text/plain"); // 分享发送的数据类型 String msg = "点酷听书是款非常棒的阅读软件,推荐给大家。\n"; if(src.toString().length()>100){ msg+=src.toString().substring(0, 100); }else{ msg+=src.toString().substring(0,src.toString().length()-1); } intent.putExtra(Intent.EXTRA_TEXT, msg); // 分享的内容 context.startActivity(Intent.createChooser(intent, "选择分享"));// 目标应用选择对话框的标题 } } } public void onClick(View v) { if(v==ibtnSearch) { popupWindow.dismiss(); popupWindow = null; String searchContent = etSearchContent.getText().toString(); pagefactory.pageDown(); Vector<String> currentPageLines = pagefactory.pageUp(); for(int i=0;i<currentPageLines.size();i++) { if(currentPageLines.get(i).contains(searchContent)) { } } LinearLayout searchControlView = null; if(searchControlView==null) searchControlView = (LinearLayout)getLayoutInflater().inflate(R.layout.search_control, null); ibtnSearchBack = (ImageButton)searchControlView.findViewById(R.id.ibtnSearchBack); ibtnSearchForward = (ImageButton)searchControlView.findViewById(R.id.ibtnSearchForward); ibtnSearchClear = (ImageButton)searchControlView.findViewById(R.id.ibtnSearchClear); ibtnSearchBack.setOnClickListener(this); ibtnSearchForward.setOnClickListener(this); ibtnSearchClear.setOnClickListener(this); showPopupWindowAtBottom(searchControlView,LayoutParams.FILL_PARENT, 100, Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM,0,0); } else if(v==ibtnSearchBack) { } else if(v==ibtnSearchForward) { } else if(v==ibtnSearchClear) { } } } @Override /** * 创建MENU */ public boolean onCreateOptionsMenu(Menu menu) { menu.add("menu");// 必须创建一项 return super.onCreateOptionsMenu(menu); } @Override /** * 拦截MENU */ public boolean onMenuOpened(int featureId, Menu menu) { if (tabMenu != null) { if (tabMenu.isShowing()) tabMenu.dismiss(); else { tabMenu.showAtLocation(findViewById(R.id.rl_reader), Gravity.BOTTOM, 0, 0); } } return false;// 返回为true 则显示系统menu } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK) { if(popupWindow!=null&&popupWindow.isShowing()) { popupWindow.dismiss(); popupWindow = null; return true; } if(!bookProgress.equals("onlyRead")) { ContentValues values = new ContentValues(); values.put(DbTags.FIELD_BOOK_PROGRESS, pagefactory.getStrPercent()); values.put(DbTags.FIELD_BOOK_BEGIN_POSITION, pagefactory.getM_mbBufBegin()); DbDataOperation.updateValuesToTable(resolver,(Uri.parse(DbTags.URI_TABLE_BOOK_INFO)),values, DbTags.FIELD_BOOK_ID+"=?", new String[]{bookId+""}); } } else if(keyCode==KeyEvent.KEYCODE_MENU) { if(tabMenu!=null&&tabMenu.isShowing()) { tabMenu.dismiss(); tabMenu = null; return true; } if(popupWindow!=null&&popupWindow.isShowing()) { popupWindow.dismiss(); popupWindow = null; return true; } } return super.onKeyDown(keyCode, event); } @Override public boolean onTouchEvent(MotionEvent event) { if(popupWindow!=null&&popupWindow.isShowing()) { popupWindow.dismiss(); popupWindow = null; } return super.onTouchEvent(event); } //SeekBar事件监听器 class MySeekBarChangedListener implements OnSeekBarChangeListener { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { currentProgress = seekBar.getProgress(); if(seekBar==sbFontSize) { pagefactory.setM_fontSize(currentProgress); pagefactory.getmPaint().setTextSize(currentProgress); pagefactory.setmLineCount((int)pagefactory.getmVisibleHeight()/pagefactory.getM_fontSize()); //Toast.makeText(BookReadActivity.this, currentProgress+" 号", 50).show(); updateView(); } else if(seekBar==sbBrightnessControl) { //Toast.makeText(BookReadActivity.this, "亮度:"+currentProgress, 100).show(); android.provider.Settings.System.putInt(getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, currentProgress); currentProgress = Settings.System.getInt(getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS,-1); WindowManager.LayoutParams lp = getWindow().getAttributes(); if(0<=currentProgress&¤tProgress<=255) lp.buttonBrightness = currentProgress; getWindow().setAttributes(lp); Log.i("亮度-->",""+lp.buttonBrightness); } else if(seekBar==sbJump) { //计算并设置tvCurrentProgress显示当前进度 double progressD = ((double)currentProgress/1000)*100 ; BigDecimal bd = new BigDecimal(progressD); String progressStr = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()+" %"; tvCurrentProgress.setText(progressStr); //跳转进度 pagefactory.setM_mbBufBegin((int) (pagefactory.getM_mbBufLen()*progressD/100)); updateView(); } else if(seekBar==redForegroundSeekBar) { redForegoundProgress = redForegroundSeekBar.getProgress(); foreR = MathUtil.DtoX(redForegoundProgress); foreColor = foreR+foreG+foreB; currentForeColorId = 0xFF000000+Integer.parseInt(foreColor, 16); themeStyleTxt.setTextColor(currentForeColorId); fontColorTxt.setText("字体颜色:R:"+redForegoundProgress+",G:"+greenForegroundProgress+",B:"+blueForegroundProgress+" -->#"+foreColor); } else if(seekBar==greenForegroundSeekBar) { greenForegroundProgress = greenForegroundSeekBar.getProgress(); foreG = MathUtil.DtoX(greenForegroundProgress); foreColor = foreR+foreG+foreB; currentForeColorId = 0xFF000000+Integer.parseInt(foreColor, 16); themeStyleTxt.setTextColor(currentForeColorId); fontColorTxt.setText("字体颜色:R:"+redForegoundProgress+",G:"+greenForegroundProgress+",B:"+blueForegroundProgress+" -->#"+foreColor); } else if(seekBar==blueForegroundSeekBar) { blueForegroundProgress = blueForegroundSeekBar.getProgress(); foreB = MathUtil.DtoX(blueForegroundProgress); foreColor = foreR+foreG+foreB; currentForeColorId = 0xFF000000+Integer.parseInt(foreColor, 16); themeStyleTxt.setTextColor(currentForeColorId); fontColorTxt.setText("字体颜色:R:"+redForegoundProgress+",G:"+greenForegroundProgress+",B:"+blueForegroundProgress+" -->#"+foreColor); } else if(seekBar==redBackgroundSeekBar) { redBackgoundProgress = redBackgroundSeekBar.getProgress(); backR = MathUtil.DtoX(redBackgoundProgress); backColor = backR+backG+backB; currentBackColorId = 0xFF000000+Integer.parseInt(backColor, 16); themeStyleTxt.setBackgroundColor(currentBackColorId); backgroundColorTxt.setText("背景颜色:R:"+redBackgoundProgress+",G:"+greenBackgroundProgress+",B:"+blueBackgroundProgress+" -->#"+backColor); } else if(seekBar==greenBackgroundSeekBar) { greenBackgroundProgress = greenBackgroundSeekBar.getProgress(); backG = MathUtil.DtoX(greenBackgroundProgress); backColor = backR+backG+backB; currentBackColorId = 0xFF000000+Integer.parseInt(backColor, 16); themeStyleTxt.setBackgroundColor(currentBackColorId); backgroundColorTxt.setText("背景颜色:R:"+redBackgoundProgress+",G:"+greenBackgroundProgress+",B:"+blueBackgroundProgress+" -->#"+backColor); } else if(seekBar==blueBackgroundSeekBar) { blueBackgroundProgress = blueBackgroundSeekBar.getProgress(); backB = MathUtil.DtoX(blueBackgroundProgress); backColor = backR+backG+backB; currentBackColorId = 0xFF000000+Integer.parseInt(backColor, 16); themeStyleTxt.setBackgroundColor(currentBackColorId); backgroundColorTxt.setText("背景颜色:R:"+redBackgoundProgress+",G:"+greenBackgroundProgress+",B:"+blueBackgroundProgress+" -->#"+backColor); } } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { } } /** * 根据新的设置更新界面 */ public void updateView() { mPageWidget.invalidate(); try { pagefactory.prePage(); pagefactory.nextPage(); } catch (IOException e) { e.printStackTrace(); } pagefactory.Draw(mCurPageCanvas); pagefactory.Draw(mNextPageCanvas); } /** * 初始化,并根据view显示响应的Popupwindow * @param view Popupwindow中的内容 */ public void showPopupWindowAtBottom(View view,int width,int height,final int gravity,final int x,final int y) { popupWindow = new PopupWindow(view, width, height); Handler handler = null; if(handler==null) handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { popupWindow.showAtLocation(mPageWidget,gravity, x, y); } }, 250); } /** * 自动阅读 * @author 002666 * */ class FlipOverRunnable implements Runnable { public void run() { try { pagefactory.nextPage(); readHandler.postDelayed(this, 3000); } catch (IOException e) { e.printStackTrace(); } updateView(); } } /** * 显示章节目录 */ public void showChapterDialog() { new AlertDialog.Builder(BookReadActivity.this).setItems(ArrayUtil.getStringArray(chapterName), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // for(int i=0;i<chapterBeginPositions.size()) pagefactory.setM_mbBufBegin(chapterBeginPositions.get(which)); updateView(); } }).show(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); SharedPreferences.Editor localEditor = context.getSharedPreferences("audio", 0).edit(); localEditor.putInt("flag", 0); localEditor.commit(); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); } public void getCureentChapter() { new Thread(new Runnable() { public void run() { boolean isFind = true; pagefactory.pageUp(); while(isFind) { lines= pagefactory.pageDown(); if(lines.size()>0) { for(int i=0;i<lines.size();i++) { matcher = pattern.matcher(lines.get(i)); if(matcher.find()) { currentChapter = matcher.group(); Log.i("chapter"+i+"-->",matcher.group()); isFind = false; break; } } } } if(preOrNext) preHandler.sendEmptyMessage(1); else nextHandler.sendEmptyMessage(1); } }).start(); } }