• 结对项目——电子书ReadBook


    该功能主要实现的有选择阅读模式(白天模式,夜晚模式,图片模式)和选择阅读进度,改变了退出方式。

    public class ReadBook extends BaseActivity {

    private BookManager bookManager;
    private Book book;
    
    private BookPageView mBookPageView;
    private Bitmap mCurPageBitmap, mNextPageBitmap;
    private Canvas mCurPageCanvas, mNextPageCanvas;
    private BookPageFactory pagefactory;
    long fileLenth = 1L;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    
    	Display display = getWindowManager().getDefaultDisplay();
    	int width = display.getWidth();
    	int height = display.getHeight();
    	
    	
    	mBookPageView = new BookPageView(this, width, height);
    	setContentView(mBookPageView);
    
    	mCurPageBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    	
    	mNextPageBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    
    	mCurPageCanvas = new Canvas(mCurPageBitmap);
    	mNextPageCanvas = new Canvas(mNextPageBitmap);
    
    	pagefactory = new BookPageFactory(this, width, height);
    
    	try {
    		
    		bookManager = new BookManager(this);
    		Long bookId = getIntent().getLongExtra("bookId", -1);
    		if (bookId == -1) {
    			ToastUtils.toast(this, "查询的id不存在");
    			startActivity(new Intent(this, MyBook.class));
    			return;
    		}
    		book = bookManager.get(bookId);
    		// 读取图书
    		fileLenth = pagefactory.openBook(book);
    		
    		pagefactory.onDraw(mCurPageCanvas);
    	} catch (IOException e1) {
    		ToastUtils.toast(this, "查询的电子书不存在");
    		Log.e(TAG, e1.getMessage());
    	}
    	
    	mBookPageView.setBitmaps(mCurPageBitmap, mCurPageBitmap);
    	
    	
    	mBookPageView.setOnTouchListener(new OnTouchListener() {
    		
    		public boolean onTouch(View v, MotionEvent e) {
    			boolean ret = false;
    			if (v == mBookPageView) {
    				if (e.getAction() == MotionEvent.ACTION_DOWN) {
    					
    					mBookPageView.abortAnimation();
    					
    					mBookPageView.calcCornerXY(e.getX(), e.getY());
    
    					pagefactory.onDraw(mCurPageCanvas);
    					if (mBookPageView.DragToRight()) {
    						pagefactory.prePage();// 上一页
    						
    						if (pagefactory.isfirstPage()) {
    							ToastUtils.toast(ReadBook.this, "首页");
    							return false;
    						}
    						pagefactory.onDraw(mNextPageCanvas);
    					} else {
    						pagefactory.nextPage();// 下一页
    						
    						if (pagefactory.islastPage()) {
    							ToastUtils.toast(ReadBook.this, "末页");
    							return false;
    						}
    						pagefactory.onDraw(mNextPageCanvas);
    					}
    					
    					mBookPageView.setBitmaps(mCurPageBitmap, mNextPageBitmap);
    				}
    
    				ret = mBookPageView.doTouchEvent(e);
    				return ret;
    			}
    			return false;
    		}
    
    	});
    }
    
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	MenuInflater inflater = new MenuInflater(this);
    	inflater.inflate(R.menu.read_book, menu);
    	return super.onCreateOptionsMenu(menu);
    }
    
    // 处理选项菜单的点击事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    	switch (item.getItemId()) {
    	case R.id.menu1:// 白天模式
    		break;
    	case R.id.menu2:// 夜晚模式
    		break;
    	case R.id.menu3:// 图片模式
    		
    		pagefactory.setBgBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.bg2));
    		
    		
    			case R.id.menu4:
    		LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    		LinearLayout myLayout = (LinearLayout) layoutInflater.inflate(R.layout.read_book_progress, null);
    		prog_int = (EditText) myLayout.findViewById(R.id.prog_int);
    		prog_float = (EditText) myLayout.findViewById(R.id.prog_float);
    		seekBar = (SeekBar) myLayout.findViewById(R.id.seekBar);
    		// 添加事件监听
    		seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    			
    			public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    				prog_int.setText(progress + "");
    				if (progress == 100) {
    					prog_float.setText("0");
    				} else {
    					double putvalue = progress * 0.01;
    					DecimalFormat df = new DecimalFormat("#0.00");
    					double fp = new Double(df.format(putvalue));
    					// 小数点后两位前移,并四舍五入
    					int j = (int) Math.round(fp * 100);
    					prog_float.setText(j + "");
    				}
    			}
    
    			
    			
    			public void onStartTrackingTouch(SeekBar seekBar) {
    			}
    
    			
    			
    			public void onStopTrackingTouch(SeekBar seekBar) {
    			}
    
    		});
    		String string = book.getProgress();
    		Log.d(TAG, "a" + string + "a");
    		String begin = string.substring(0, string.indexOf('.'));
    		String end = string.substring(string.indexOf('.') + 1, string.length() - 1);
    		Log.d(TAG, begin + end);
    		seekBar.setProgress(Integer.parseInt(begin));
    		prog_int.setText(begin);
    		prog_float.setText(end);
    		AlterD = new AlertDialog.Builder(this);
    		AlterD.setTitle("进度跳转");
    		AlterD.setIcon(R.drawable.mb);
    		// AlterD.setMessage("测试View加入进度条");
    		AlterD.setView(myLayout);
    		AlterD.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    		
    			public void onClick(DialogInterface dialog, int which) {
    				DecimalFormat df = new DecimalFormat("#0.00");
    				Log.d(TAG, "prog_int:" + prog_int.getText().toString() + ",prog_float:" + prog_float.getText().toString());
    				String string = prog_int.getText().toString() + "." + prog_float.getText().toString();
    				double d = Double.parseDouble(string);
    				double fp = new Double(df.format(d / 100));
    				int begin = (int) (fp * fileLenth);
    				Log.d(TAG, "begin:" + begin);
    				Log.d(TAG, "fileLenth:" + fileLenth);
    				pagefactory.setM_mbBufEnd(begin);
    				pagefactory.onDraw(mCurPageCanvas);
    				
    			}
    		});
    		AlterD.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    			
    			public void onClick(DialogInterface dialog, int which) {
    				dialog.dismiss();
    			}
    		});
    		AlterD.show();
    		break;
    	}
    	return super.onOptionsItemSelected(item);
    }
    
    private AlertDialog.Builder AlterD;
    SeekBar seekBar;
    EditText prog_int, prog_float;
    
    // 改变阅读页面的返回事件
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    	if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
    		startActivity(new Intent(this, MyBook.class));
    		ReadBook.this.finish();
    		return false;
    	}
    	return false;
    }
    

    }

  • 相关阅读:
    PHP cURL 函数
    PHP 5 Calendar 函数
    PHP 5 Array 函数
    PHP 实例 AJAX 投票
    PHP 实例 AJAX RSS 阅读器
    PHP 实例
    PHP 实例 AJAX 与 XML
    PHP 实例 AJAX 与 MySQL
    22_传智播客iOS视频教程_类的定义
    21_传智播客iOS视频教程_类的设计和名词提炼法
  • 原文地址:https://www.cnblogs.com/qiushi123/p/7003938.html
Copyright © 2020-2023  润新知