簡體   English   中英

使用Touch事件監聽器移動RelativeLayout可以使布局在移動時擺動

[英]Moving RelativeLayout with Touch event listener makes the Layout Wiggle while moving

我正在嘗試使用TheTouch Listener來移動RelativeLayout視圖。

問題在於,盡管版式確實在移動,但它在各個位置之間快速擺動。 這是全觸摸監聽器

    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(my)

                       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

如您所見,輸出不是按順序排列的。 好像發生了兩個不同的事件。 為什么僅通過運行以下方法即可得到此結果

(順便說一下,牆壁是一個RelativeLayout)

這是moveY(my)方法

public class Mover extends Brain {
public Mover(){

}

public void moveX(float val){


   Wall.setX(val);

}
public void moveY(float val){

    Wall.setY(val);

}

好的,忘了我解決了它。

我所要做的就是setaY(my)更新新職位。

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

                       manmove.moveY(my);
                       setaX(my);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM