我正在为android实现一个epub阅读器。我已经成功阅读了epub文件并将内容添加到动态文本视图和图像视图中。 因此,内容实际上由多个textview和imageview组成。
目前我使用了scrollview来阅读这本书。现在我需要将整个内容分解为页面(页面内容应基于屏幕大小)。
为此,我正在考虑使用ViewPager。因此,它可以轻松地在页面之间滑动。但是,如果你有其他解决方案,那将是一个很大的帮助。
任何人都可以帮助实现这个目标吗?
感谢。
答案 0 :(得分:1)
以下是开始使用的内容,以下组件测量填充屏幕的文本,addText
方法返回未安装的文本。
与ImageView
结合使用会增加测量高度的复杂性,因此我只是将其用于文本。您还可以调整值,删除多少个字符以更快地进行迭代,并检查可行性,如果行数与行高相结合可以更有效地完成。
请注意,该组件需要一个长字符串,它将为下一页留下什么子字符串。
public class ReaderLinearLayout extends LinearLayout {
private static final int TEXT_SIZE = 44;
private final DisplayMetrics dm = new DisplayMetrics();
public ReaderLinearLayout(Context context) {
super(context);
}
public ReaderLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public String addText(String text) {
int height = getScreenHeight();
String textLeftFromEnd = text;
int textHeight = getTextHeight(text);
while (textHeight > height) {
text = text.substring(0, text.length() - 1);
textHeight = getTextHeight(text);
}
TextView textView = new TextView(getContext());
textView.setText(text);
textView.setTextColor(Color.BLACK);
textView.setTextSize(TEXT_SIZE);
addView(textView);
return textLeftFromEnd.subSequence(text.length(),
textLeftFromEnd.length()).toString();
}
public int getTextHeight(final String text) {
TextView textView = new TextView(getContext());
textView.setText(text);
textView.setTextSize(TEXT_SIZE);
TextPaint textPaint = textView.getPaint();
return new StaticLayout(text.toString(), textPaint, getScreenWidth(),
Alignment.ALIGN_NORMAL, 1.0f, 0.0f, true).getHeight();
}
public int getScreenHeight() {
WindowManager wm = (WindowManager) getContext().getSystemService(
Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(dm);
return dm.heightPixels;
}
public int getScreenWidth() {
WindowManager wm = (WindowManager) getContext().getSystemService(
Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(dm);
return dm.widthPixels;
}
}