我正在一个使用 ml kit 文本识别库的应用程序中工作;Rect
该应用程序从图像中读取文本并在每个单词周围放置一个。现在我希望这些Rects
在用户点击其中一个或在某些单词上方滑动时改变颜色。所以,我能够正确处理触摸事件,但我不能做的是改变触摸的颜色Rect
!
我应该在触摸的矩形上方绘制新的彩色矩形吗?或者我可以为现有的矩形着色(我认为我不能)?
类: TextGraphic, GraphicOverlay。 //这是绘制矩形的地方
我也试过这个解决方案,所以我在课堂上输入了这个方法TextGraphic
:
public void changeColor(boolean isHighlighted) {
if(isHighlighted) {
rectPaint.setColor(COLOR_HIGHLIGHTED);
rectPaint.setAlpha(400);//set opacity of rect
}else{
rectPaint.setColor(COLOR_DEFAULT);
rectPaint.setAlpha(400);//set opacity of rect
}
postInvalidate();
}
并在用户触摸文本时调用它,但问题是所有Rects
颜色都会改变,而且它们在运行时不会改变!
我的 ActivityClass 中的一个片段,我在其中使用了一些回调方法来传递信息。
ArrayList<Rect> rects = new ArrayList<>();
@Override
public void onAdd(FirebaseVisionText.Element element, Rect elementRect, String wordText) {
GraphicOverlay.Graphic textGraphic = new TextGraphic(mGraphicOverlay, element);
mTextGraphic = new TextGraphic(mGraphicOverlay, element);
mGraphicOverlay.add(textGraphic);
rects.add(elementRect);
}
我处理触摸事件的 ActivityClass 的片段:
@Override
public boolean onDown(MotionEvent event) {
helper.dismissKeyboard();
touchX = Math.round(event.getX());
touchY = Math.round(event.getY());
for(int x=0; x< rects.size();x++) {
if (rects.get(x).contains(touchX, touchY)) {
// line has been clicked
mTextGraphic.changeColor(true);
return true;
}
}
return true;
}