2017-12-13 4 views
0

タッチリスナーを使用してRelativeLayoutビューを移動しようとしています。タッチイベントリスナーでRelativeLayoutを移動すると、レイアウトのゆがみが発生します

レイアウトは確かに移動している間は、位置間を速く動いています。 は、これは私が私のコンソールに情報を記録しますConsoleクラスを作成したフルタッチリスナー

protected void touch(){ 
    Mover manmove = new Mover(); 

    Wall.setOnTouchListener(new View.OnTouchListener() { 


     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      final int action = motionEvent.getAction(); 
      if(!isZooming()){ 

      switch (action & MotionEvent.ACTION_MASK) { 
       //If The Screen is Tapped 
       case (MotionEvent.ACTION_UP): 
       case (MotionEvent.ACTION_DOWN): 
        //Setting the initial Touch point 
        setTouchDownX(motionEvent.getX()); 
        setTouchDownY(motionEvent.getY()); 

        break; 

       case (MotionEvent.ACTION_MOVE): 


         float my = getaY() + (motionEvent.getY() - getTouchDownY()); 
         console.log(my); 

         // manmove.moveY(my); 



        break; 

      } 

      } 


      return true; 
     } 

    }); 

} 

です。

manmove.moveY(my)コードが下にあります。

(上記のように)manmove.moveY()をコメントアウトすると、メソッドは実行されません。 Console.logは次のものを出力します(どちらが望ましい座標です)。

I/ViewRootImpl: ViewRoot's Touch Event : ACTION_DOWN 
I/Console(Float):: 0.0 
I/Console(Float):: 0.0 
I/Console(Float):: -9.876221 
I/Console(Float):: -22.249512 
I/Console(Float):: -39.085938 
I/Console(Float):: -58.50659 
I/Console(Float):: -82.34204 
I/Console(Float):: -101.75574 
I/Console(Float):: -122.02234 
I/Console(Float):: -141.76233 
I/Console(Float):: -159.39001 
I/Console(Float):: -174.78223 
I/Console(Float):: -189.00647 
I/Console(Float):: -202.30786 
I/Console(Float):: -215.42957 
I/Console(Float):: -229.95398 
I/Console(Float):: -244.98132 
I/Console(Float):: -258.14148 
I/Console(Float):: -272.5271 

わかりますように、それらは連続しているので、動きは滑らかでなければなりません。 私はmanmove.moveY(私の)

     else{ 
         //Allow Scrolling on FullView 
         float my = getaY() + (motionEvent.getY() - getTouchDownY()); 
         console.log(my); 

         manmove.moveY(my); 


        } 

を実行する場合、私はこの出力を取得します。

I/ViewRootImpl: ViewRoot's Touch Event : ACTION_DOWN 
I/Console(Float):: 0.0 
I/Console(Float):: 0.0 
I/Console(Float):: 0.0 
I/Console(Float):: -7.222168 
I/Console(Float):: -86.498535 
I/Console(Float):: -60.04187 
I/Console(Float):: -125.71619 
I/Console(Float):: -92.756226 
I/Console(Float):: -152.55365 
I/Console(Float):: -113.45459 
I/Console(Float):: -178.72412 
I/Console(Float):: -140.0473 
I/Console(Float):: -206.31036 
I/Console(Float):: -170.90485 
I/Console(Float):: -222.82135 
I/Console(Float):: -188.71191 
I/Console(Float):: -234.86389 

ご覧のとおり、出力は順不同です。あたかも2つの異なるイベントが起こっているかのように。なぜ私が(RelativeLayout方法によって壁である)

は、ここで私が解決

public class Mover extends Brain { 
public Mover(){ 

} 

public void moveX(float val){ 


    Wall.setX(val); 

} 
public void moveY(float val){ 

    Wall.setY(val); 

} 

答えて

0

よし、みんながそれを忘れmoveY(私の)メソッドですが、単に以下の方法に

を実行することによって、この結果を取得していますそれ。

私がしなければならなかったのは、新しい位置を更新するためにsetaY(my)です。

 float my = getaY() + (motionEvent.getY() - getTouchDownY()); 
         console.log(my); 

         manmove.moveY(my); 
         setaX(my); 
関連する問題