0

我创建了面板,其中包含不同颜色、铅笔、橡皮擦和类似于 MS-Paint 的不同形状。我可以使用 Touch Event 方法在屏幕上绘图或书写。但是当我在屏幕上画一些东西时(当我触摸屏幕时),MotionEvent.ACTION_Down 方法正在调用。所以它工作正常。当我从屏幕上松开手指时,MotionEvent.ACTION_up 方法正在调用并且工作正常。

所以,我的问题是,就像 MS-PAINT 一样,在我从屏幕上松开手指之前,我无法看到我画或写的东西。例如,请参阅此视频。用户可以看到他何时拖动形状或尝试绘制铅笔。此外,在此链接中,用户使用铅笔绘图,无需在屏幕上松开手指即可看到。

但是,当我在屏幕上画一些东西时,一旦我松开手指,它就会出现。

我需要的是,当用户触摸屏幕本身时,如果他/她在屏幕上移动手指,用户必须能够看到他们试图在屏幕上绘制或书写的内容。

例如:如果我尝试在屏幕上写一些像“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。我在代码中尝试了很多,但没有更改,移动时也没有找到任何解决方案。

4

1 回答 1

0

基本思想是,当您在变量中点击记录该点时,然后在 ACTION_MOVE 中记录当前点并在这两个点之间画一条线。完成后将此点保存在前一点中。须藤代码:

Point last;
Point current;
...
case ACTION_DOWN:
      last=mouse.position;
      break;
case ACTION_MOVE:
      current=mouse.position;
      drawLine(current,last);
      last=current;
      break;

这样做,你的画应该​​没问题。NB 请记住,这是一个 sudo 代码。:P

编辑。我的一个应用程序的示例。基本上我指出了你应该做什么:

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;
    }

initialcurrent都是 Point 对象。

于 2013-02-10T14:20:56.167 回答