下面列出了android.text.StaticLayout#getLineForOffset ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
protected int[] offsetToCord(int offset) {
fillLayoutForOffset(offset, layoutBlock);
StaticLayout layout = layoutBlock.layout;
if (layout == null || offset > layout.getText().length()) {
return tmpCoord;
}
int line = layout.getLineForOffset(offset);
tmpCoord[0] = (int) (layout.getPrimaryHorizontal(offset) + layoutBlock.xOffset);
tmpCoord[1] = layout.getLineBottom(line);
tmpCoord[1] += layoutBlock.yOffset;
return tmpCoord;
}
private void drawSelection(Canvas canvas, StaticLayout layout, int selectionStart, int selectionEnd) {
int startLine = layout.getLineForOffset(selectionStart);
int endLine = layout.getLineForOffset(selectionEnd);
int startX = (int) layout.getPrimaryHorizontal(selectionStart);
int endX = (int) layout.getPrimaryHorizontal(selectionEnd);
if (startLine == endLine) {
canvas.drawRect(startX, layout.getLineTop(startLine), endX, layout.getLineBottom(startLine), selectionPaint);
} else {
canvas.drawRect(startX, layout.getLineTop(startLine), layout.getLineWidth(startLine), layout.getLineBottom(startLine), selectionPaint);
canvas.drawRect(0, layout.getLineTop(endLine), endX, layout.getLineBottom(endLine), selectionPaint);
for (int i = startLine + 1; i < endLine; i++) {
canvas.drawRect(0, layout.getLineTop(i), layout.getLineWidth(i), layout.getLineBottom(i), selectionPaint);
}
}
}
public void setCurrentLayout(StaticLayout layout, int start, float yOffset) {
currentLayout = layout;
currentLine = layout.getLineForOffset(start);
lastTop = -1;
heightOffset = yOffset;
if (Build.VERSION.SDK_INT >= 28) {
int lineCount = layout.getLineCount();
if (lineCount > 0) {
lineHeight = layout.getLineBottom(lineCount - 1) - layout.getLineTop(lineCount - 1);
}
}
}
protected int[] offsetToCord(int offset) {
fillLayoutForOffset(offset, layoutBlock);
StaticLayout layout = layoutBlock.layout;
if (layout == null || offset > layout.getText().length()) {
return tmpCoord;
}
int line = layout.getLineForOffset(offset);
tmpCoord[0] = (int) (layout.getPrimaryHorizontal(offset) + layoutBlock.xOffset);
tmpCoord[1] = layout.getLineBottom(line);
tmpCoord[1] += layoutBlock.yOffset;
return tmpCoord;
}
private void drawSelection(Canvas canvas, StaticLayout layout, int selectionStart, int selectionEnd) {
int startLine = layout.getLineForOffset(selectionStart);
int endLine = layout.getLineForOffset(selectionEnd);
int startX = (int) layout.getPrimaryHorizontal(selectionStart);
int endX = (int) layout.getPrimaryHorizontal(selectionEnd);
if (startLine == endLine) {
canvas.drawRect(startX, layout.getLineTop(startLine), endX, layout.getLineBottom(startLine), selectionPaint);
} else {
canvas.drawRect(startX, layout.getLineTop(startLine), layout.getLineWidth(startLine), layout.getLineBottom(startLine), selectionPaint);
canvas.drawRect(0, layout.getLineTop(endLine), endX, layout.getLineBottom(endLine), selectionPaint);
for (int i = startLine + 1; i < endLine; i++) {
canvas.drawRect(0, layout.getLineTop(i), layout.getLineWidth(i), layout.getLineBottom(i), selectionPaint);
}
}
}
public void setCurrentLayout(StaticLayout layout, int start, float yOffset) {
currentLayout = layout;
currentLine = layout.getLineForOffset(start);
lastTop = -1;
heightOffset = yOffset;
if (Build.VERSION.SDK_INT >= 28) {
int lineCount = layout.getLineCount();
if (lineCount > 0) {
lineHeight = layout.getLineBottom(lineCount - 1) - layout.getLineTop(lineCount - 1);
}
}
}
public void setCurrentLayout(StaticLayout layout, int start, float yOffset) {
currentLayout = layout;
currentLine = layout.getLineForOffset(start);
lastTop = -1;
heightOffset = yOffset;
}
public void setCurrentLayout(StaticLayout layout, int start, float yOffset) {
currentLayout = layout;
currentLine = layout.getLineForOffset(start);
lastTop = -1;
heightOffset = yOffset;
}