我在画布视图中有多个矩形,我想分别以右侧和底部位置的文本形式显示每个矩形的宽度和高度。使用
Canvas.DrawText(text,x,y,paint);
我可以绘制它们的宽度和高度,但我想让它们可拖动,以便用户可以轻松地将一个矩形的宽度或高度分配给另一个矩形。
问题是我们怎样才能检测到用户正好点击文本,因为矩形也是可拖动的。 请帮忙!!!
答案 0 :(得分:0)
对于dimens.xml中的所有分辨率设置维度
<dimen name="myFontSize20">20sp</dimen>
<dimen name="myFontSize75">75sp</dimen>
// ------------
myFontSize75=75;
EdtText touchedtext;
ArrayList<EdtText> editTexts = new ArrayList<EdtText>();
int imageSize20 = getResources().getDimensionPixelSize(R.dimen.myFontSize20);
int imageSize75 = getResources().getDimensionPixelSize(R.dimen.myFontSize75);
将文本存储在数组列表中,找到OnTouch事件,触摸哪个文本。
对于文本检查已经在该位置上的文本,如果它不在该位置上,则在该位置创建新的文本,否则返回被触摸的文本。
/--------------Edit text class------------------//
class EdtText {
float startX, stopY;
float textsize;
String EdtText1;
public EdtText(String EdtText, float startX, float stopY, float textsize) {
this.EdtText1 = EdtText;
this.textsize = textsize;
this.startX = startX;
this.stopY = stopY;
}
}
// --------------检查文本是否已触摸位置--------------- //
private EdtText obtainTouchedText(final float xTouch2, final float yTouch2) {
EdtText touchedtext = getTouchedtext(xTouch2, yTouch2, 1);
//for getting textSize
textsize = c.getTextsize();
if (null == touchedtext) {
touchedtext = new EdtText("kdsks", xTouch2, yTouch2, textsize);
editTexts.add(touchedtext);
}
return touchedtext;
}
private EdtText getTouchedtext(float xTouch2, float yTouch2, int i) {
EdtText touched2 = null;
for (EdtText edt : editTexts) {
String hb = edt.EdtText1.toString();
int k = hb.length();
if (((Math.abs(edt.startX + ((k / 2) * 16) - xTouch2) < imageSize75) || (Math.abs(edt.startX + ((k) * 16) - xTouch2) < imageSize75)) && (Math.abs(edt.stopY - yTouch2) < imageSize20)) {
touched2 = edt;
if (i == 0) {
text_cir++;
} else {
}
break;
} else {
}
}
return touched2;
}
//用于在画布上拖动文字
@Override
public boolean onTouchEvent(final MotionEvent event) {
boolean handled = false;
float xTouch = 0;
float yTouch = 0;
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
xTouch = event.getX(0);
yTouch = event.getY(0);
touchedtext = getTouchedtext(xTouch, yTouch, 0);
if (touchedtext != null) {
dx = xTouch - touchedtext.startX;
dy = yTouch - touchedtext.stopY;
}
case MotionEvent.ACTION_MOVE:
endX = event.getX();
endY = event.getY();
float x_add = endX - dx;
float y_add = endY- dy;
touchedtext.startX = x_add;
touchedtext.stopY = y_add;
invalidate();
handled = true;
break;
case MotionEvent.ACTION_UP:
invalidate();
handled = true;
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_CANCEL:
invalidate();
break;
default:
break;
}
invalidate();
return super.onTouchEvent(event) || handled;
}
// - OnDraw方法为绘图文本添加此代码--------------- //
for (EdtText l : editTexts) {
canvas.drawText(l.EdtText1, l.startX, l.stopY, mPaint);
}