繁体   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