gpt4 book ai didi

android - 如果您从链接区域开始拖动,LinkMovementMethod 不会滚动

转载 作者:行者123 更新时间:2023-11-29 23:49:00 25 4
gpt4 key购买 nike

LinkMovementMethod 类有助于查找、突出显示和处理对 TextView 内链接的点击,在处理 onTouch() 方法时存在问题 - 如果您从检测到的链接开始拖动,您将看到不会发生滚动。

最佳答案

ScrollSensitiveLinkMovementMethod 具有更好的处理接触,并允许您在这种情况下滚动。

我想分享我的简单解决方案,可能会有帮助。 https://gist.github.com/mpetlyuk/ec2d64659fbedfd47f7e0e650c9608dd如果你喜欢它,你可以用星星取悦我:)

package your_package_name;

import android.text.Layout;
import android.text.Selection;
import android.text.Spannable;
import android.text.method.LinkMovementMethod;
import android.text.method.Touch;
import android.text.style.ClickableSpan;
import android.view.MotionEvent;
import android.widget.TextView;

public class ScrollSensitiveLinkMovementMethod extends LinkMovementMethod {

private int CLICK_ACTION_THRESHOLD = 100;
private float startX;
private float startY;

private boolean isAClick(float startX, float endX, float startY, float endY) {
float differenceX = Math.abs(startX - endX);
float differenceY = Math.abs(startY - endY);
return !(differenceX > CLICK_ACTION_THRESHOLD || differenceY > CLICK_ACTION_THRESHOLD);
}

@Override
public boolean onTouchEvent(TextView widget, Spannable buffer,
MotionEvent event) {

int action = event.getAction();

switch (action) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();

case MotionEvent.ACTION_UP:
float endX = event.getX();
float endY = event.getY();

int x = (int) event.getX();
int y = (int) event.getY();

x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();

x += widget.getScrollX();
y += widget.getScrollY();

Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);

ClickableSpan[] links = buffer.getSpans(off, off, ClickableSpan.class);

if (links.length != 0) {
if (action == MotionEvent.ACTION_UP && isAClick(startX, endX, startY, endY)) {
links[0].onClick(widget);
return true;
} else {
Selection.setSelection(buffer,
buffer.getSpanStart(links[0]),
buffer.getSpanEnd(links[0]));
}
} else {
Selection.removeSelection(buffer);
}
break;
}

return Touch.onTouchEvent(widget, buffer, event);
}
}

关于android - 如果您从链接区域开始拖动,LinkMovementMethod 不会滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51113107/

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