gpt4 book ai didi

com.koolearn.klibrary.text.view.ZLTextView类的使用及代码示例

转载 作者:知者 更新时间:2024-03-13 11:47:44 28 4
gpt4 key购买 nike

本文整理了Java中com.koolearn.klibrary.text.view.ZLTextView类的一些代码示例,展示了ZLTextView类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。ZLTextView类的具体详情如下:
包路径:com.koolearn.klibrary.text.view.ZLTextView
类名称:ZLTextView

ZLTextView介绍

暂无

代码示例

代码示例来源:origin: ydcx/KooReader

public void highlight(ZLTextPosition start, ZLTextPosition end) {
  removeHighlightings(ZLTextManualHighlighting.class);
  addHighlighting(new ZLTextManualHighlighting(this, start, end));
}

代码示例来源:origin: ydcx/KooReader

private void skip(ZLTextPage page, ZLTextWordCursor cursor, int unit, int size) {
  final ZLTextParagraphCursor paragraphCursor = cursor.getParagraphCursor();
  if (paragraphCursor == null) {
    return;
  }
  final int endElementIndex = paragraphCursor.getParagraphLength();
  resetTextStyle();
  applyStyleChanges(paragraphCursor, 0, cursor.getElementIndex());
  ZLTextLineInfo info = null;
  while (!cursor.isEndOfParagraph() && size > 0) {
    info = processTextLine(page, paragraphCursor, cursor.getElementIndex(), cursor.getCharIndex(), endElementIndex, info);
    cursor.moveTo(info.EndElementIndex, info.EndCharIndex);
    size -= infoSize(info, unit);
  }
}

代码示例来源:origin: ydcx/KooReader

private synchronized float computeCharsPerPage() {
  setTextStyle(getTextStyleCollection().getBaseStyle());
  final int textWidth = getTextColumnWidth();
  final int textHeight = getTextAreaHeight();
  final int num = myModel.getParagraphsNumber();
  final int totalTextSize = myModel.getTextLength(num - 1);
  final float charsPerParagraph = ((float) totalTextSize) / num;
  final float charWidth = computeCharWidth();
  final int indentWidth = getElementWidth(ZLTextElement.Indent, 0);
  final float effectiveWidth = textWidth - (indentWidth + 0.5f * textWidth) / charsPerParagraph;
  float charsPerLine = Math.min(effectiveWidth / charWidth,
      charsPerParagraph * 1.2f);
  final int strHeight = getWordHeight() + getContext().getDescent();
  final int effectiveHeight = (int)
      (textHeight -
          (getTextStyle().getSpaceBefore(metrics())
              + getTextStyle().getSpaceAfter(metrics()) / 2) / charsPerParagraph);
  final int linesPerPage = effectiveHeight / strHeight;
  return charsPerLine * linesPerPage;
}

代码示例来源:origin: ydcx/KooReader

public final synchronized String pagePositionPecReal(ZLTextPage page) {
  int current = getCurrentNumber(page, false); // 传入要绘制的page
  int total = sizeOfFullText();
  if (getCurrentCharNumber(ZLViewEnums.PageIndex.current, true) == 0) {
    return "0.00%";
  }
  if (computeTextPageNumber(total) <= 3) {
    current = page.EndCursor.getParagraphIndex();
    total = myModel.getParagraphsNumber() - 1;
  }
  final StringBuilder info = new StringBuilder();
  float size = (float) current * 100 / total;
  DecimalFormat df = new DecimalFormat("0.00");
  info.append(df.format(size));
  info.append("%");
  return info.toString();
}

代码示例来源:origin: Jiangzqts/EpubRead

setContext(context);
final ZLFile wallpaper = getWallpaperFile(); // 获取背景图片
if (wallpaper != null) {
  context.clear(wallpaper, getFillMode());
} else {
  context.clear(getBackgroundColor());
    page = myPreviousPage;
    if (myPreviousPage.PaintState == PaintStateEnum.NOTHING_TO_PAINT) {
      preparePaintInfo(myCurrentPage);
      myPreviousPage.EndCursor.setCursor(myCurrentPage.StartCursor);
      myPreviousPage.PaintState = PaintStateEnum.END_IS_KNOWN;
      preparePaintInfo(myCurrentPage);
      myNextPage.StartCursor.setCursor(myCurrentPage.EndCursor);
      myNextPage.PaintState = PaintStateEnum.START_IS_KNOWN;
preparePaintInfo(page);
int x = getLeftMargin(); // MarginLeft
int y = getTopMargin();
int index = 0;
int columnIndex = 0;
for (ZLTextLineInfo info : lineInfos) {
  info.adjust(previousInfo);
  prepareTextLine(page, info, x, y, columnIndex);
  y += info.Height + info.Descent + info.VSpaceAfter;
  labels[++index] = page.TextElementMap.size();

代码示例来源:origin: ydcx/KooReader

ZLTextLineInfo previousInfo
) {
  final ZLPaintContext context = getContext();
  final ZLTextLineInfo info = new ZLTextLineInfo(paragraphCursor, startIndex, startCharIndex, getTextStyle());
  final ZLTextLineInfo cachedInfo = myLineInfoCache.get(info);
  if (cachedInfo != null) {
    cachedInfo.adjust(previousInfo);
    applyStyleChanges(paragraphCursor, startIndex, cachedInfo.EndElementIndex);
    return cachedInfo;
    while (isStyleChangeElement(element)) {
      applyStyleChangeElement(element);
      ++currentElementIndex;
      currentCharIndex = 0;
    info.StartStyle = getTextStyle();
    info.RealStartElementIndex = currentElementIndex;
    info.RealStartCharIndex = currentCharIndex;
  ZLTextStyle storedStyle = getTextStyle();
  final int maxWidth = page.getTextWidth() - storedStyle.getRightIndent(metrics());
  info.LeftIndent = storedStyle.getLeftIndent(metrics());
  if (isFirstLine && storedStyle.getAlignment() != ZLTextAlignmentType.ALIGN_CENTER) {
    info.LeftIndent += storedStyle.getFirstLineIndent(metrics());
    newWidth += getElementWidth(element, currentCharIndex);
    newHeight = Math.max(newHeight, getElementHeight(element));
    newDescent = Math.max(newDescent, getElementDescent(element));

代码示例来源:origin: Jiangzqts/EpubRead

private void prepareTextLine(ZLTextPage page, ZLTextLineInfo info, int x, int y, int columnIndex) {
  y = Math.min(y + info.Height, getTopMargin() + page.getTextHeight() - 1);
  final ZLPaintContext context = getContext();
  final ZLTextParagraphCursor paragraphCursor = info.ParagraphCursor;
  setTextStyle(info.StartStyle);
  int spaceCounter = info.SpaceCounter;
  int fullCorrection = 0;
  switch (getTextStyle().getAlignment()) {
    case ZLTextAlignmentType.ALIGN_RIGHT:
      x += maxWidth - getTextStyle().getRightIndent(metrics()) - info.Width;
      break;
    case ZLTextAlignmentType.ALIGN_CENTER:
      x += (maxWidth - getTextStyle().getRightIndent(metrics()) - info.Width) / 2;
      break;
    case ZLTextAlignmentType.ALIGN_JUSTIFY:
      if (!endOfParagraph && (paragraphCursor.getElement(info.EndElementIndex) != ZLTextElement.AfterParagraph)) {
        fullCorrection = maxWidth - getTextStyle().getRightIndent(metrics()) - info.Width;
  for (int wordIndex = info.RealStartElementIndex; wordIndex != endElementIndex; ++wordIndex, charIndex = 0) {
    final ZLTextElement element = paragraph.getElement(wordIndex);
    final int width = getElementWidth(element, charIndex);
    if (element == ZLTextElement.HSpace) {
      if (wordOccurred && spaceCounter > 0) {
        final int correction = fullCorrection / spaceCounter;
        final int spaceLength = context.getSpaceWidth() + correction;
        if (getTextStyle().isUnderline()) {
          spaceElement = new ZLTextElementArea(

代码示例来源:origin: Jiangzqts/EpubRead

private synchronized void preparePaintInfo(ZLTextPage page) {
  page.setSize(getTextColumnWidth(), getTextAreaHeight(), twoColumnView(), page == myPreviousPage);
          buildInfos(page, startCursor, endCursor);
          if (!page.isEmptyPage() && (myScrollingMode != ScrollingMode.KEEP_LINES || !endCursor.samePositionAs(page.EndCursor))) {
            page.StartCursor.setCursor(startCursor);
        buildInfos(page, page.StartCursor, page.EndCursor);
        switch (myScrollingMode) {
          case ScrollingMode.NO_OVERLAPPING:
            page.StartCursor.setCursor(findStartOfPrevousPage(page, page.StartCursor));
            break;
          case ScrollingMode.KEEP_LINES: {
              ZLTextWordCursor startCursor = findStartOfPrevousPage(page, endCursor);
              if (startCursor.samePositionAs(page.StartCursor)) {
                page.StartCursor.setCursor(findStartOfPrevousPage(page, page.StartCursor));
              } else {
                page.StartCursor.setCursor(startCursor);
              page.StartCursor.setCursor(findStartOfPrevousPage(page, page.StartCursor));
            page.StartCursor.setCursor(findStart(page, page.StartCursor, SizeUnit.LINE_UNIT, myOverlappingValue));
            break;
          case ScrollingMode.SCROLL_PERCENTAGE:
            page.StartCursor.setCursor(findStart(page, page.StartCursor, SizeUnit.PIXEL_UNIT, page.getTextHeight() * myOverlappingValue / 100));
            break;
        buildInfos(page, page.StartCursor, page.EndCursor);

代码示例来源:origin: Jiangzqts/EpubRead

public final synchronized PagePosition pagePosition() {
  int current = computeTextPageNumber(getCurrentCharNumber(ZLViewEnums.PageIndex.current, false));
  int total = computeTextPageNumber(sizeOfFullText());
  if (total > 3) {
    return new PagePosition(current, total);
  preparePaintInfo(myCurrentPage);
  ZLTextWordCursor cursor = myCurrentPage.StartCursor;
  if (cursor == null || cursor.isNull()) {
    ZLTextWordCursor prevCursor = myPreviousPage.StartCursor;
    if (prevCursor == null || prevCursor.isNull()) {
      preparePaintInfo(myPreviousPage);
      prevCursor = myPreviousPage.StartCursor;
    ZLTextWordCursor nextCursor = myNextPage.EndCursor;
    if (nextCursor == null || nextCursor.isNull()) {
      preparePaintInfo(myNextPage);
      nextCursor = myNextPage.EndCursor;

代码示例来源:origin: ydcx/KooReader

resetTextStyle();
  final ZLTextParagraphCursor paragraphCursor = result.getParagraphCursor();
  final int wordIndex = result.getElementIndex();
  applyStyleChanges(paragraphCursor, 0, wordIndex);
  info = new ZLTextLineInfo(paragraphCursor, wordIndex, result.getCharIndex(), getTextStyle());
  final int endIndex = info.ParagraphCursorLength;
  while (info.EndElementIndex != endIndex) {
    info = processTextLine(page, paragraphCursor, info.EndElementIndex, info.EndCharIndex, endIndex, previousInfo);
    textAreaHeight -= info.Height + info.Descent;
    if (textAreaHeight < 0 && page.LineInfos.size() > page.Column0Height) {
        page.LineInfos.size() == page.Column0Height)
    );
resetTextStyle();

代码示例来源:origin: ydcx/KooReader

public final synchronized String pagePositionPec() {
    int current = getCurrentCharNumber(PageIndex.current, false);
    int total = sizeOfFullText();

    if (getCurrentCharNumber(ZLViewEnums.PageIndex.current, true) == 0) {
      return "0.00%";
    }
//        LogUtil.i24("size1:" + getCurrentCharNumber(PageIndex.current, false) + "/" + sizeOfFullText());
//        LogUtil.i24("size2:" + myCurrentPage.EndCursor.getParagraphIndex() + "/" + myModel.getParagraphsNumber());
    if (computeTextPageNumber(total) <= 3) {
      current = myCurrentPage.EndCursor.getParagraphIndex();
      total = myModel.getParagraphsNumber() - 1;
    }

    final StringBuilder info = new StringBuilder();
    float size = (float) current * 100 / total;
    DecimalFormat df = new DecimalFormat("0.00");
    info.append(df.format(size));
    info.append("%");
    return info.toString();
  }

代码示例来源:origin: ydcx/KooReader

public final synchronized void gotoPage(int page) {
  if (myModel == null || myModel.getParagraphsNumber() == 0) {
    return;
  }
  final float factor = computeCharsPerPage();
  final float textSize = page * factor;
  int intTextSize = (int) textSize;
  int paragraphIndex = myModel.findParagraphByTextLength(intTextSize);
  if (paragraphIndex > 0 && myModel.getTextLength(paragraphIndex) > intTextSize) {
    --paragraphIndex;
  }
  intTextSize = myModel.getTextLength(paragraphIndex);
  int sizeOfTextBefore = myModel.getTextLength(paragraphIndex - 1);
  while (paragraphIndex > 0 && intTextSize == sizeOfTextBefore) {
    --paragraphIndex;
    intTextSize = sizeOfTextBefore;
    sizeOfTextBefore = myModel.getTextLength(paragraphIndex - 1);
  }
  final int paragraphLength = intTextSize - sizeOfTextBefore;
  final int wordIndex;
  if (paragraphLength == 0) {
    wordIndex = 0;
  } else {
    preparePaintInfo(myCurrentPage);
    final ZLTextWordCursor cursor = new ZLTextWordCursor(myCurrentPage.EndCursor);
    cursor.moveToParagraph(paragraphIndex);
    wordIndex = cursor.getParagraphCursor().getParagraphLength();
  }
  gotoPositionByEnd(paragraphIndex, wordIndex, 0);
}

代码示例来源:origin: Jiangzqts/EpubRead

@Override
public ZLTextPosition getEndPosition() {
  if (isEmpty()) {
    return null;
  }
  final ZLTextParagraphCursor cursor = myView.cursor(myRightMostRegionSoul.ParagraphIndex);
  final ZLTextElement element = cursor.getElement(myRightMostRegionSoul.EndElementIndex);
  return new ZLTextFixedPosition(
    myRightMostRegionSoul.ParagraphIndex,
    myRightMostRegionSoul.EndElementIndex,
    element instanceof ZLTextWord ? ((ZLTextWord)element).Length : 0
  );
}

代码示例来源:origin: Jiangzqts/EpubRead

protected SelectionCursor.Which findSelectionCursor(int x, int y, float maxDistance2) {
  if (mySelection.isEmpty()) {
    return null;
  }
  final float leftDistance2 = distance2ToCursor(x, y, SelectionCursor.Which.Left);
  final float rightDistance2 = distance2ToCursor(x, y, SelectionCursor.Which.Right);
  if (rightDistance2 < leftDistance2) {
    return rightDistance2 <= maxDistance2 ? SelectionCursor.Which.Right : null;
  } else {
    return leftDistance2 <= maxDistance2 ? SelectionCursor.Which.Left : null;
  }
}

代码示例来源:origin: Jiangzqts/EpubRead

private synchronized int computeTextPageNumber(int textSize) {
  if (myModel == null || myModel.getParagraphsNumber() == 0) {
    return 1;
  }
  final float factor = 1.0f / computeCharsPerPage();
  final float pages = textSize * factor;
  return Math.max((int) (pages + 1.0f - 0.5f * factor), 1);
}

代码示例来源:origin: ydcx/KooReader

myCharWidth = computeCharWidth(myLettersBuffer, myLettersBufferLength);

代码示例来源:origin: ydcx/KooReader

setContext(context);
final ZLFile wallpaper = getWallpaperFile(); // 获取背景图片
if (wallpaper != null) {
  context.clear(wallpaper, getFillMode());
} else {
  context.clear(getBackgroundColor());
    page = myPreviousPage;
    if (myPreviousPage.PaintState == PaintStateEnum.NOTHING_TO_PAINT) {
      preparePaintInfo(myCurrentPage);
      myPreviousPage.EndCursor.setCursor(myCurrentPage.StartCursor);
      myPreviousPage.PaintState = PaintStateEnum.END_IS_KNOWN;
      preparePaintInfo(myCurrentPage);
      myNextPage.StartCursor.setCursor(myCurrentPage.EndCursor);
      myNextPage.PaintState = PaintStateEnum.START_IS_KNOWN;
preparePaintInfo(page);
int x = getLeftMargin(); // MarginLeft
int y = getTopMargin();
int index = 0;
int columnIndex = 0;
for (ZLTextLineInfo info : lineInfos) {
  info.adjust(previousInfo);
  prepareTextLine(page, info, x, y, columnIndex);
  y += info.Height + info.Descent + info.VSpaceAfter;
  labels[++index] = page.TextElementMap.size();

代码示例来源:origin: Jiangzqts/EpubRead

ZLTextLineInfo previousInfo
) {
  final ZLPaintContext context = getContext();
  final ZLTextLineInfo info = new ZLTextLineInfo(paragraphCursor, startIndex, startCharIndex, getTextStyle());
  final ZLTextLineInfo cachedInfo = myLineInfoCache.get(info);
  if (cachedInfo != null) {
    cachedInfo.adjust(previousInfo);
    applyStyleChanges(paragraphCursor, startIndex, cachedInfo.EndElementIndex);
    return cachedInfo;
    while (isStyleChangeElement(element)) {
      applyStyleChangeElement(element);
      ++currentElementIndex;
      currentCharIndex = 0;
    info.StartStyle = getTextStyle();
    info.RealStartElementIndex = currentElementIndex;
    info.RealStartCharIndex = currentCharIndex;
  ZLTextStyle storedStyle = getTextStyle();
  final int maxWidth = page.getTextWidth() - storedStyle.getRightIndent(metrics());
  info.LeftIndent = storedStyle.getLeftIndent(metrics());
  if (isFirstLine && storedStyle.getAlignment() != ZLTextAlignmentType.ALIGN_CENTER) {
    info.LeftIndent += storedStyle.getFirstLineIndent(metrics());
    newWidth += getElementWidth(element, currentCharIndex);
    newHeight = Math.max(newHeight, getElementHeight(element));
    newDescent = Math.max(newDescent, getElementDescent(element));

代码示例来源:origin: ydcx/KooReader

private void prepareTextLine(ZLTextPage page, ZLTextLineInfo info, int x, int y, int columnIndex) {
  y = Math.min(y + info.Height, getTopMargin() + page.getTextHeight() - 1);
  final ZLPaintContext context = getContext();
  final ZLTextParagraphCursor paragraphCursor = info.ParagraphCursor;
  setTextStyle(info.StartStyle);
  int spaceCounter = info.SpaceCounter;
  int fullCorrection = 0;
  switch (getTextStyle().getAlignment()) {
    case ZLTextAlignmentType.ALIGN_RIGHT:
      x += maxWidth - getTextStyle().getRightIndent(metrics()) - info.Width;
      break;
    case ZLTextAlignmentType.ALIGN_CENTER:
      x += (maxWidth - getTextStyle().getRightIndent(metrics()) - info.Width) / 2;
      break;
    case ZLTextAlignmentType.ALIGN_JUSTIFY:
      if (!endOfParagraph && (paragraphCursor.getElement(info.EndElementIndex) != ZLTextElement.AfterParagraph)) {
        fullCorrection = maxWidth - getTextStyle().getRightIndent(metrics()) - info.Width;
  for (int wordIndex = info.RealStartElementIndex; wordIndex != endElementIndex; ++wordIndex, charIndex = 0) {
    final ZLTextElement element = paragraph.getElement(wordIndex);
    final int width = getElementWidth(element, charIndex);
    if (element == ZLTextElement.HSpace) {
      if (wordOccurred && spaceCounter > 0) {
        final int correction = fullCorrection / spaceCounter;
        final int spaceLength = context.getSpaceWidth() + correction;
        if (getTextStyle().isUnderline()) {
          spaceElement = new ZLTextElementArea(

代码示例来源:origin: ydcx/KooReader

private synchronized void preparePaintInfo(ZLTextPage page) {
  page.setSize(getTextColumnWidth(), getTextAreaHeight(), twoColumnView(), page == myPreviousPage);
          buildInfos(page, startCursor, endCursor);
          if (!page.isEmptyPage() && (myScrollingMode != ScrollingMode.KEEP_LINES || !endCursor.samePositionAs(page.EndCursor))) {
            page.StartCursor.setCursor(startCursor);
        buildInfos(page, page.StartCursor, page.EndCursor);
        switch (myScrollingMode) {
          case ScrollingMode.NO_OVERLAPPING:
            page.StartCursor.setCursor(findStartOfPrevousPage(page, page.StartCursor));
            break;
          case ScrollingMode.KEEP_LINES: {
              ZLTextWordCursor startCursor = findStartOfPrevousPage(page, endCursor);
              if (startCursor.samePositionAs(page.StartCursor)) {
                page.StartCursor.setCursor(findStartOfPrevousPage(page, page.StartCursor));
              } else {
                page.StartCursor.setCursor(startCursor);
              page.StartCursor.setCursor(findStartOfPrevousPage(page, page.StartCursor));
            page.StartCursor.setCursor(findStart(page, page.StartCursor, SizeUnit.LINE_UNIT, myOverlappingValue));
            break;
          case ScrollingMode.SCROLL_PERCENTAGE:
            page.StartCursor.setCursor(findStart(page, page.StartCursor, SizeUnit.PIXEL_UNIT, page.getTextHeight() * myOverlappingValue / 100));
            break;
        buildInfos(page, page.StartCursor, page.EndCursor);

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com