我创建了具有不同颜色,铅笔,橡皮擦和不同形状的集合的面板,类似于MS-Paint。我可以使用触摸事件方法在屏幕上绘图或书写。但是当我在屏幕上绘制某些内容时(当我触摸屏幕时),MotionEvent.ACTION_Down方法正在调用。所以它工作正常。当我从屏幕上松开手指时,MotionEvent.ACTION_up方法正在调用并正常工作。
所以,我的问题是,就像MS-PAINT一样,在我从屏幕上松开手指之前,我无法看到我画的内容。有关示例,请参阅this video。用户可以看到他拖动形状或试图画铅笔的时间。此外,在此链接中,用户使用铅笔绘制,并且在屏幕上不释放手指的情况下可见。
但是,当我在屏幕上画一些东西时,一旦我松开了手指,它就会出现。
我需要的是,当用户在屏幕上移动手指时触摸屏幕本身,用户必须能够看到他们想要在屏幕上绘制或写入的内容。
举个例子:如果我试图在屏幕上写一些像“Apple”这样的单词,我试图把“A”。但是当我写下字母“A”时,除非我从屏幕上拿出手指,否则它是不可见的。有一次,当我画完字母“A”后,我从屏幕上松开了手指,那么我在画面上只显示了文字或图片。
所以,我做了MotionEvent.ACTION_DOWN和MotionEVent.ACTION_UP。它工作正常。
但是,MotionEvent.ACTION_MOVE根本无法正常工作。
这是我的代码,
@Override
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
if(Shape == ShapeLine)
{
GraphicObject = new Line();
((Line) GraphicObject).getBegin().setX(event.getX());
((Line) GraphicObject).getBegin().setY(event.getY());
}
if(Shape== ShapeRect)
{
GraphicObject = new Rectangle();
Point temp = new Point(event.getX(), event.getY());
endPoint = new Point();
((Rectangle) GraphicObject).settemppointOfOneEndRectangle(temp);
}
else if(event.getAction() == MotionEvent.ACTION_MOVE){
if(Shape== ShapeLine)
{
final float x=event.getX();
final float y=event.getY();
}
if(Shape == ShapeRect)
{
endPoint.x=event.getX();
endPoint.y=event.getY();
invalidate();
}
有人建议我,关于ACTION_MOVE。我在代码中尝试了很多,但没有任何变化,我在移动时没有找到任何解决方案。
答案 0 :(得分:0)
基本思路是当你点击变量中的那个点时,然后在ACTION_MOVE中记录当前点并在这两个点之间画一条线。一旦完成,在前一点保存这一点。 Sudo代码:
Point last;
Point current;
...
case ACTION_DOWN:
last=mouse.position;
break;
case ACTION_MOVE:
current=mouse.position;
drawLine(current,last);
last=current;
break;
这样做,你的绘图应该没问题。 注:请记住,这是一个sudo代码。 :P
EDIT。我的一个应用程序示例。基本上我指出了你应该做的事情:
public boolean onTouchEvent(MotionEvent event)
{
int action = event.getAction();
switch(action & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
initial.x=(int)event.getX();
initial.y=(int)event.getY();
break;
case MotionEvent.ACTION_MOVE:
current.x=(int)event.getX();
current.y=(int)event.getY();
//draw line using initial as start and current as end point
//sudo code: drawLine(initial,current)
//now set initial to current
initial=current// for the continuity of drawing.
break;
}
return true;
}
初始和当前都是Point对象。