[英]When RelativeLayout is into a ScrollView, moving TextView with touch doesn't work correctly
[英]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.