Ich habe eine LinearLayout, die fünf Ansichten innerhalb hat, sie bilden ein 1x5-Raster.Wie wird das gezogene Objekt auf den Ursprung des Ziehens ausgerichtet?
Dieses LinearLayout wird gezogen.
Ich setze gerade die Einstellung onTouchListeners auf jede der fünf Ansichten, überprüfe, von welchen der fünf der Widerstand stammt und motionEvent.getAction() auf der LinearLayout aufrufen.
Dies ist nicht perfekt, weil das LinearLayout durch seine Mitte gezogen wird und nicht durch den Startpunkt des Ziehens.
Gibt es eine Möglichkeit, das LinearLayout am Anfang von motionEvent zu transformieren, sodass die Ansicht, aus der der Ziehvorgang stammt, unter dem Finger liegt, während Sie ziehen?
MyTouchListener, die auf jedem der fünf Ansichten innerhalb Linearlayout
private final class MyTouchListener implements View.OnTouchListener {
//public boolean onTouch(View view, MotionEvent motionEvent) {
public boolean onTouch(View view, MotionEvent motionEvent) {
LinearLayout ship = (LinearLayout)view.getParent();
dragCellIndex = ship.indexOfChild(view);
dragCellTotal = ship.getChildCount();
view = ship;
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
}
hast du etwas versucht? Write einige Codes? –
Ich habe den Touch-Listener hinzugefügt, den ich zum ursprünglichen Beitrag verwende. Ich habe versucht zu überprüfen, wie viele Zellen in der LinearLayout links und rechts von Drag-Ursprung und für jeden auf der linken SetTranslationX (cell.length() * - 1) und auf der rechten Seite setTranslationX (cell.length()). Das hat nichts geändert. –