Wie macht man das Ziehen von TextView in LinearLayout unter Android flüssig?

Ich habe eine Situation, die ich nicht beheben kann, hoffentlich bekomme ich einige Ratschläge von Ihnen.

Die Situation ist einfach: Ich habe ein LinearLayout, in dem ich eine TextView mit mehreren Textzeilen habe. Der Benutzer kann die Textansicht verschieben, bis er eine gewünschte Position gefunden hat. Was wirklich wichtig ist, ist, dass die Textansicht teilweise aus dem LinearLayout entfernt sein kann (es wird geschnitten erscheinen).

Hier sind einige Codebeispiele:

 <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top|center_horizontal"
        android:clipChildren="false"
        android:gravity="center_horizontal|center_vertical"
        android:orientation="vertical" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textColor="@color/text_color"
            android:textSize="16sp" />
    </LinearLayout>

Wie Sie sehen, hat das LinearLayout clipChildren = false, um das Ausschneiden von Text zu ermöglichen. Für die Textansicht habe ich einen Touch-Listener eingestellt

txt.setOnTouchListener(new View.OnTouchListener() {
            int initialX = 0;
            int initialY = 0;

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getActionMasked()) {
                case MotionEvent.ACTION_DOWN:
                    initialX = (int) event.getX();
                    initialY = (int) event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                            int currentX = (int) event.getX();
                            int currentY = (int) event.getY();
                            LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) txt.getLayoutParams();

                            int left = lp.leftMargin + (currentX - initialX);
                            int top = lp.topMargin + (currentY - initialY);
                            int right = lp.rightMargin - (currentX - initialX);
                            int bottom = lp.bottomMargin - (currentY - initialY);

                            lp.rightMargin = right;
                            lp.leftMargin = left;
                            lp.bottomMargin = bottom;
                            lp.topMargin = top;

                            txt.setLayoutParams(lp);
                    break;
                default:
                    break;
                }
                return true;
            }
        });

Und hier ist mein Problem: Wie Sie sehen, habe ich alle Layoutparameter (rechts, links, unten, oben) eingestellt. Warum das ?

1) Wenn ich nur left / top verwende, ist der Drag sanft genug, aber der Text wird am rechten Rand umbrochen, anstatt abgeschnitten zu werden. Wahrscheinlich aufgrund des rechten 0-Rand-Werts.

2) Wenn ich alle Ränder verwende, wird der Text so geschnitten, wie ich es möchte, aber die Bewegung ist nicht glatt, sondern springt nur ein paar Pixel herum.

Wie kann ich das beheben?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage