我正在构建一个Android应用程序,该应用程序在画布上绘制线条图,显示在相机视图上。它的目的是绘制线条,提供在该边界捕获图像的轮廓。
我能够绘制这样的线条,用作边界以在其中拍摄照片。但我想要的是我无法拖动我绘制的线条或者我想在绘制后缩放线条。因为当前绘制线条时必须非常小心,并且需要稍微偏差。
那么有人可以帮助我如何在线实现拖动侦听器,如何创建行作为可以在线上触摸手指时听到的对象?
谢谢, 伊尔凡
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downx = event.getX();
downy = event.getY();
fstTouch = downx;
fstTouchx = downx;
fstTouchY = downy;
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
upx = event.getX();
upy = event.getY();
if (actionE == 1) {
actionE = 2;
canvas.drawLine(downx, downy, upx, upy, Manage_Template.mPaint);
invalidate();
editor.putFloat("downx", fstTouchx);
editor.putFloat("downy", fstTouchY);
editor.putString("fst", "2");
editor.putFloat("newDownx", upx);
editor.putFloat("newDowny", upy);
editor.commit();
}
else {
fDownx = sharedPreferences.getFloat("downx", 0);
fDowny = sharedPreferences.getFloat("downy", 0);
newDownx = sharedPreferences.getFloat("newDownx", 0);
newDowny = sharedPreferences.getFloat("newDowny", 0);
fstLate = fstTouch - fDownx; //85-100=15
scndLate = fstTouch - newDownx;//120-100=30
st = String.valueOf(fstLate);
sl = String.valueOf(scndLate);
st = st.replace("-", "");
sl = sl.replace("-", "");
fstLate = Float.parseFloat(st);
scndLate = Float.parseFloat(sl);
if (fstLate >= scndLate) {
canvas.drawLine(newDownx, newDowny, upx, upy, Manage_Template.mPaint);
editor.putFloat("newDownx", upx);
editor.putFloat("newDowny", upy);
editor.commit();
invalidate();
Log.d("Action UP","fstlate>");
} else {
canvas.drawLine(fDownx, fDowny, upx, upy, Manage_Template.mPaint);
editor.putFloat("downx", upx);
editor.putFloat("downy", upy);
editor.putFloat("newDownx", newDownx);
editor.putFloat("newDowny", newDowny);
editor.commit();
invalidate();
Log.d("Action UP","scndlate");
}
}
// }
break;
}
return true;
}
答案 0 :(得分:1)
我会使用onTouchListener来执行此操作。这是我在学习它时使用的一个例子:Using OnTouchListener
我认为您想要的主要内容是在每MotionEvent.ACTION_MOVE
期间更新一行,然后在获得MotionEvent.ACTION_UP
时将该行保留在原来的位置
希望这有帮助!