0

さまざまな色、鉛筆、消しゴム、MS-Paintに似たさまざまな形のコレクションでパネルを作成しました。タッチイベント方式を使用して、画面上に描画または書き込みを行うことができました。しかし、画面に何かを描くと(画面に触れると)、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内で現在のポイントを記録し、これら2つのポイントの間に線を引くことです。完了したら、このポイントを前のポイントに保存します。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

編集。私のアプリの1つからの例。基本的に私はあなたが何をすべきかを指摘しました:

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オブジェクトです。

于 2013-02-10T14:20:56.167 に答える