本项目是一个基于安卓的开源电子书阅读器项目,基于开源的FBREADER1.8.2项目进行的二次开发,支持大文件(亲测5.6MB TXT文件正常打开,就是加载慢点)支持滚屏、翻书、左右滑动三种阅读方式。支持扫描SD卡文件并且添加到书架或者收藏,支持书签功能、支持TXT,HTML,OEB,MOBI,EPUB等格式文件的阅读。本项目代码量很大,是一个比较完善的工程,源码的阅读分析需要一定的安卓基础和耐心,有少量注释。默认编译版本4.1.2编码UTF-8。

package yuku.ambilwarna;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.yamin.reader.R;
public class AmbilWarnaDialog {
public interface OnAmbilWarnaListener {
void onCancel(AmbilWarnaDialog dialog);
void onOk(AmbilWarnaDialog dialog, int color);
}
final AlertDialog dialog;
final OnAmbilWarnaListener listener;
final View viewHue;
final AmbilWarnaKotak viewSatVal;
final ImageView viewCursor;
final View viewOldColor;
final View viewNewColor;
final ImageView viewTarget;
final ViewGroup viewContainer;
final float[] currentColorHsv = new float[3];
/**
* create an AmbilWarnaDialog. call this only from OnCreateDialog() or from a background thread.
*
* @param context
* current context
* @param color
* current color
* @param listener
* an OnAmbilWarnaListener, allowing you to get back error or
*/
public AmbilWarnaDialog(final Context context, int color, OnAmbilWarnaListener listener) {
this.listener = listener;
Color.colorToHSV(color, currentColorHsv);
final View view = LayoutInflater.from(context).inflate(R.layout.ambilwarna_dialog, null);
viewHue = view.findViewById(R.id.ambilwarna_viewHue);
viewSatVal = (AmbilWarnaKotak) view.findViewById(R.id.ambilwarna_viewSatBri);
viewCursor = (ImageView) view.findViewById(R.id.ambilwarna_cursor);
viewOldColor = view.findViewById(R.id.ambilwarna_warnaLama);
viewNewColor = view.findViewById(R.id.ambilwarna_warnaBaru);
viewTarget = (ImageView) view.findViewById(R.id.ambilwarna_target);
viewContainer = (ViewGroup) view.findViewById(R.id.ambilwarna_viewContainer);
viewSatVal.setHue(getHue());
viewOldColor.setBackgroundColor(color);
viewNewColor.setBackgroundColor(color);
viewHue.setOnTouchListener(new View.OnTouchListener() {
@Override public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE
|| event.getAction() == MotionEvent.ACTION_DOWN
|| event.getAction() == MotionEvent.ACTION_UP) {
float y = event.getY();
if (y < 0.f) y = 0.f;
if (y > viewHue.getMeasuredHeight()) y = viewHue.getMeasuredHeight() - 0.001f; // to avoid looping from end to start.
float hue = 360.f - 360.f / viewHue.getMeasuredHeight() * y;
if (hue == 360.f) hue = 0.f;
setHue(hue);
// update view
viewSatVal.setHue(getHue());
moveCursor();
viewNewColor.setBackgroundColor(getColor());
return true;
}
return false;
}
});
viewSatVal.setOnTouchListener(new View.OnTouchListener() {
@Override public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE
|| event.getAction() == MotionEvent.ACTION_DOWN
|| event.getAction() == MotionEvent.ACTION_UP) {
float x = event.getX(); // touch event are in dp units.
float y = event.getY();
if (x < 0.f) x = 0.f;
if (x > viewSatVal.getMeasuredWidth()) x = viewSatVal.getMeasuredWidth();
if (y < 0.f) y = 0.f;
if (y > viewSatVal.getMeasuredHeight()) y = viewSatVal.getMeasuredHeight();
setSat(1.f / viewSatVal.getMeasuredWidth() * x);
setVal(1.f - (1.f / viewSatVal.getMeasuredHeight() * y));
// update view
moveTarget();
viewNewColor.setBackgroundColor(getColor());
return true;
}
return false;
}
});
dialog = new AlertDialog.Builder(context)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
if (AmbilWarnaDialog.this.listener != null) {
AmbilWarnaDialog.this.listener.onOk(AmbilWarnaDialog.this, getColor());
}
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
if (AmbilWarnaDialog.this.listener != null) {
AmbilWarnaDialog.this.listener.onCancel(AmbilWarnaDialog.this);
}
}
})
.setOnCancelListener(new OnCancelListener() {
// if back button is used, call back our listener.
@Override public void onCancel(DialogInterface paramDialogInterface) {
if (AmbilWarnaDialog.this.listener != null) {
AmbilWarnaDialog.this.listener.onCancel(AmbilWarnaDialog.this);
}
}
})
.create();
// kill all padding from the dialog window
dialog.setView(view, 0, 0, 0, 0);
// move cursor & target on first draw
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override public void onGlobalLayout() {
moveCursor();
moveTarget();
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
}
protected void moveCursor() {
float y = viewHue.getMeasuredHeight() - (getHue() * viewHue.getMeasuredHeight() / 360.f);
if (y == viewHue.getMeasuredHeight()) y = 0.f;
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) viewCursor.getLayoutParams();
layoutParams.leftMargin = (int) (viewHue.getLeft() - Math.floor(viewCursor.getMeasuredWidth() / 2) - viewContainer.getPaddingLeft());
;
layoutParams.topMargin = (int) (viewHue.getTop() y - Math.floor(viewCursor.getMeasuredHeight() / 2) - viewContainer.getPaddingTop());
;
viewCursor.setLayoutParams(layoutParams);
}
protected void moveTarget() {
float x = getSat() * viewSatVal.getMeasuredWidth();
float y = (1.f - getVal()) * viewSatVal.getMeasuredHeight();
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) viewTarget.getLayoutParams();
layoutParams.leftMargin = (int) (viewSatVal.getLeft() x - Math.floor(viewTarget.getMeasuredWidth() / 2) - viewContainer.getPaddingLeft());
layoutParams.topMargin = (int) (viewSatVal.getTop() y - Math.floor(viewTarget.getMeasuredHeight() / 2) - viewContainer.getPaddingTop());
viewTarget.setLayoutParams(layoutParams);
}
private int getColor() {
return Color.HSVToColor(currentColorHsv);
}
private float getHue() {
return currentColorHsv[0];
}
private float getSat() {
return currentColorHsv[1];
}
private float getVal() {
return currentColorHsv[2];
}
private void setHue(float hue) {
currentColorHsv[0] = hue;
}
private void setSat(float sat) {
currentColorHsv[1] = sat;
}
private void setVal(float val) {
currentColorHsv[2] = val;
}
public void show() {
dialog.show();
}
public AlertDialog getDialog() {
return dialog;
}
}
资源文件列表
.project , 819
.settings/org.eclipse.core.resources.prefs , 57
AndroidManifest.xml , 10809
assets/data/help/MiniHelp.be.fb2 , 2937
assets/data/help/MiniHelp.ca.fb2 , 2331
assets/data/help/MiniHelp.cs.fb2 , 2195
assets/data/help/MiniHelp.de.fb2 , 2250
assets/data/help/MiniHelp.en.fb2 , 1901
assets/data/help/MiniHelp.es.fb2 , 2448
assets/data/help/MiniHelp.fr.fb2 , 2684
assets/data/help/MiniHelp.gl.fb2 , 2337
assets/data/help/MiniHelp.hu.fb2 , 2189
assets/data/help/MiniHelp.it.fb2 , 2579
assets/data/help/MiniHelp.ka.fb2 , 4160
assets/data/help/MiniHelp.nb.fb2 , 1973
assets/data/help/MiniHelp.nl.fb2 , 2022
assets/data/help/MiniHelp.pl.fb2 , 2101
assets/data/help/MiniHelp.pt.fb2 , 2098
assets/data/help/MiniHelp.ro.fb2 , 2266
assets/data/help/MiniHelp.ru.fb2 , 2844
assets/data/help/MiniHelp.sr.fb2 , 2880
assets/data/help/MiniHelp.th.fb2 , 5377
assets/data/help/MiniHelp.tr.fb2 , 2144
assets/data/help/MiniHelp.uk.fb2 , 2856
assets/data/help/MiniHelp.vi.fb2 , 2919
assets/data/help/MiniHelp.zh.fb2 , 2217
assets/data/help/MiniHelp.zh_TW.fb2 , 1726
assets/default/keymap.xml , 478
assets/default/styles.xml , 3024
assets/default/tapzones/down.xml , 476
assets/default/tapzones/left_to_right.xml , 479
assets/default/tapzones/right_to_left.xml , 479
assets/default/tapzones/up.xml , 479
assets/dictionaries/bitknights.xml , 2573
assets/dictionaries/main.xml , 1798
assets/dictionaries/paragon.xml , 259276
assets/encodings/Encodings.xml , 6825
assets/formats/fb2/fb2genres.xml , 42171
assets/formats/html/html.ent , 9560
assets/formats/xhtml/xhtml-lat1.ent , 11775
assets/formats/xhtml/xhtml-special.ent , 3751
assets/formats/xhtml/xhtml-symbol.ent , 13848
assets/hyphenationPatterns/bg.pattern , 156589
assets/hyphenationPatterns/CHANGES , 591
assets/hyphenationPatterns/cs.pattern , 97929
assets/hyphenationPatterns/de-traditional.pattern , 157114
assets/hyphenationPatterns/de.pattern , 159533
assets/hyphenationPatterns/el.pattern , 9667
assets/hyphenationPatterns/en.pattern , 121780
assets/hyphenationPatterns/eo.pattern , 83575
assets/hyphenationPatterns/es.pattern , 85784
assets/hyphenationPatterns/fi.pattern , 8313
assets/hyphenationPatterns/fr.pattern , 33840
assets/hyphenationPatterns/hu.pattern , 385856
assets/hyphenationPatterns/id.pattern , 7228
assets/hyphenationPatterns/it.pattern , 10122
assets/hyphenationPatterns/ka.pattern , 116
assets/hyphenationPatterns/LICENSES , 489
assets/hyphenationPatterns/lt.pattern , 42185
assets/hyphenationPatterns/nb.pattern , 748822
assets/hyphenationPatterns/nl.pattern , 355040
assets/hyphenationPatterns/pl.pattern , 119142
assets/hyphenationPatterns/pt.pattern , 9116
assets/hyphenationPatterns/ru.pattern , 136647
assets/hyphenationPatterns/sv.pattern , 127923
assets/hyphenationPatterns/tr.pattern , 13635
assets/hyphenationPatterns/uk.pattern , 105370
assets/languagePatterns/cs_ibm852 , 14324
assets/languagePatterns/cs_iso-8859-2 , 14324
assets/languagePatterns/cs_utf-16 , 15891
assets/languagePatterns/cs_utf-16be , 15892
assets/languagePatterns/cs_utf-8 , 15762
assets/languagePatterns/cs_windows-1250 , 14324
assets/languagePatterns/de_iso-8859-1 , 14402
assets/languagePatterns/de_utf-16 , 15855
assets/languagePatterns/de_utf-16be , 15855
assets/languagePatterns/de_utf-8 , 15995
assets/languagePatterns/el_iso-8859-7 , 14391
assets/languagePatterns/el_utf-16 , 15979
assets/languagePatterns/el_utf-16be , 15971
assets/languagePatterns/el_utf-8 , 15969
assets/languagePatterns/el_windows-1253 , 14391
assets/languagePatterns/en_us-ascii , 14467
assets/languagePatterns/en_utf-16 , 15910
assets/languagePatterns/en_utf-16be , 15910
assets/languagePatterns/en_utf-8 , 16045
assets/languagePatterns/eo_iso-8859-3 , 14359
assets/languagePatterns/eo_us-ascii , 14359
assets/languagePatterns/eo_utf-16 , 15921
assets/languagePatterns/eo_utf-16be , 15921
assets/languagePatterns/eo_utf-8 , 15772
assets/languagePatterns/es_iso-8859-1 , 14541
assets/languagePatterns/es_utf-16 , 15877
assets/languagePatterns/es_utf-16be , 15877
assets/languagePatterns/es_utf-8 , 16045
assets/languagePatterns/fi_iso-8859-1 , 14419
assets/languagePatterns/fi_utf-16 , 15892
assets/languagePatterns/fi_utf-16be , 15892
assets/languagePatterns/fi_utf-8 , 15865
assets/languagePatterns/fr_iso-8859-1 , 14523
assets/languagePatterns/fr_utf-16 , 15885
assets/languagePatterns/fr_utf-16be , 15885
assets/languagePatterns/fr_utf-8 , 16038
assets/languagePatterns/hu_iso-8859-2 , 14425
assets/languagePatterns/hu_utf-16 , 15891
assets/languagePatterns/hu_utf-16be , 15891
assets/languagePatterns/hu_utf-8 , 15837
assets/languagePatterns/hu_windows-1250 , 14425
assets/languagePatterns/in_utf-16 , 15632
assets/languagePatterns/in_utf-16be , 15632
assets/languagePatterns/in_utf-8 , 15541
assets/languagePatterns/it_iso-8859-1 , 14449
assets/languagePatterns/it_utf-16 , 15882
assets/languagePatterns/it_utf-16be , 15882
assets/languagePatterns/it_utf-8 , 15903
assets/languagePatterns/li_iso-8859-13 , 14386
assets/languagePatterns/li_utf-16 , 15856
assets/languagePatterns/li_utf-16be , 15859
assets/languagePatterns/li_utf-8 , 15792
assets/languagePatterns/li_windows-1257 , 14386
assets/languagePatterns/nb_iso-8859-1 , 14368
assets/languagePatterns/nb_utf-16 , 15862
assets/languagePatterns/nb_utf-16be , 15862
assets/languagePatterns/nb_utf-8 , 15797
assets/languagePatterns/nl_iso-8859-1 , 14433
assets/languagePatterns/nl_utf-16 , 15837
assets/languagePatterns/nl_utf-16be , 15837
assets/languagePatterns/nl_utf-8 , 15874
assets/languagePatterns/nl_windows-1252 , 14433
assets/languagePatterns/pt_iso-8859-1 , 14449
assets/languagePatterns/pt_utf-16 , 15885
assets/languagePatterns/pt_utf-16be , 15885
assets/languagePatterns/pt_utf-8 , 15901
assets/languagePatterns/ru_ibm866 , 14523
assets/languagePatterns/ru_iso-8859-5 , 14523
assets/languagePatterns/ru_koi8-r , 14523
assets/languagePatterns/ru_mac-cyrillic , 14523
assets/languagePatterns/ru_utf-16 , 15922
assets/languagePatterns/ru_utf-16be , 15990
assets/languagePatterns/ru_utf-8 , 15976
assets/languagePatterns/ru_windows-1251 , 14523
assets/languagePatterns/sv_iso-8859-1 , 14432
assets/languagePatterns/sv_utf-16 , 15896
assets/languagePatterns/sv_utf-16be , 15896
assets/languagePatterns/sv_utf-8 , 15849
assets/languagePatterns/ta_utf-16 , 3539
assets/languagePatterns/ta_utf-16be , 3954
assets/languagePatterns/ta_utf-8 , 3172
assets/languagePatterns/tr_ibm857 , 14547
assets/languagePatterns/tr_iso-8859-9 , 14547
assets/languagePatterns/tr_utf-16 , 15923
最多只能显示150条信息!
