0
其通常簡單的數學,但我找不到合適的解決方案。首先,我有一個觸摸監聽器,拖放在我的情況下稱爲貼紙的imageview。然後,當用戶在貼紙上至少1秒鐘握住他的手指時,拖動方式開始並且用戶可以拖動圖像視圖。將Imageview拖動到正確的位置
不幸的是,我現在使用貼紙的中間位置,但我想要真正的觸摸位置的imageview。
這就是我使用TouchEvent
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v instanceof Sticker) {
Log.i(TAG, "onTouch()");
Sticker sticker = (Sticker) v;
Log.i("Sticker"," Found "+sticker.isFound());
Log.i("Sticker"," Found "+sticker.moving);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i("Sticker", " Found moving");
handler.postDelayed(mLongPressed, LONGPRESS_TIME);
//Take time for the short click
tslong = System.currentTimeMillis()/1000;
if(sticker.isFound()) {
//Get X,Y for the threshold
mDownX = event.getX();
mDownY = event.getY();
}
break;
case MotionEvent.ACTION_MOVE:
Log.i("Sticker"," Found moving");
if(sticker.isFound()) {
if (sticker.moving) {
if (Math.abs(mDownX - event.getX()) > SCROLL_THRESHOLD || Math.abs(mDownY - event.getY()) > SCROLL_THRESHOLD)
handler.removeCallbacks(mLongPressed);
sticker.coodinates.x = event.getRawX() - sticker.getWidth()/2;
sticker.coodinates.y = event.getRawY() - sticker.getHeight() * 2/3;
if (sticker.coodinates.x > (layoutSizeWidth * 0.99) - sticker.getWidth()) {
sticker.coodinates.x = (float) ((layoutSizeWidth * 0.99)- sticker.getWidth());
} else if (sticker.coodinates.x < 0) {
sticker.coodinates.x = 1;
}
if (sticker.coodinates.y > layoutSizeHeight - (sticker.getHeight() * 2/2)) {
sticker.coodinates.y = layoutSizeHeight - (sticker.getHeight() * 2/2);
} else if (sticker.coodinates.y < 0) {
sticker.coodinates.y = 1;
}
sticker.setX(sticker.coodinates.x);
sticker.setY(sticker.coodinates.y);
}
}
break;
case MotionEvent.ACTION_UP:
if((System.currentTimeMillis()/1000) - tslong < INVOKE_POPUP_TIME)
handleSimpleClick(v, event);
if(sticker.isFound()) {
if (sticker.moving) {
sticker.setX(sticker.coodinates.x);
sticker.setY(sticker.coodinates.y);
mDownX = event.getX();
mDownY = event.getY();
sticker.moving = false;
}
handler.removeCallbacks(mLongPressed);
}
break;
}
return true;
}
return false;
}
的把手,這裏我設置的貼紙,當用戶觸摸貼紙1秒的位置。
sticker.coodinates.x = event.getRawX() - sticker.getWidth()/2;
sticker.coodinates.y = event.getRawY() - sticker.getHeight() * 2/3;
這裏是爲了更好地理解一個GIF: enter link description here
當你仔細觀察,你看到一個跳轉到TOUCHINPUT。但是貼紙應該是可以拖動的。很難用英語說:我甚至不能用母語解釋它。
你想達到什麼真正結束? – pskink
貼紙(Imageview)位於正確的位置。當你看到頂部的圖片。在左側,您會看到我的程序將imageview始終轉換到手指中間。而在正確的圖片中,貼紙的位置與觸摸位置相同。 – DrMed