Jak przeciągnąć tekst w widoku gładkim liniowym w systemie Android?

Mam sytuację, której nie jestem w stanie naprawić, mam nadzieję, że otrzymam od ciebie kilka porad.

Sytuacja jest prosta: mam LinearLayout, w którym mam TextView z wieloma liniami tekstu. Użytkownik może przeciągać widok tekstowy, dopóki nie znajdzie odpowiedniej pozycji. Ważne jest, aby TextView mógł być częściowo wyprowadzony z LinearLayout (pojawi się wycięty).

Oto kilka przykładów kodu:

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

Jak widać LinearLayout ma clipChildren = false, aby umożliwić odcięcie tekstu. W widoku tekstowym ustawiam słuchacza dotykowego

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;
            }
        });

A oto mój problem: jak widać, ustawiłem wszystkie parametry układu (prawy, lewy, dolny, górny margines). Dlaczego ?

1) Jeśli używam tylko lewego / górnego, przeciąganie jest wystarczająco gładkie, ale tekst jest zawijany na prawej krawędzi zamiast cięć. Prawdopodobnie z powodu prawidłowej wartości marginesu 0.

2) Jeśli użyję wszystkich marginesów, tekst zostanie wycięty tak, jak chcę, ale ruch nie jest płynny, po prostu przeskakuje do kilku pikseli.

Jak mogę to naprawić?

questionAnswers(1)

yourAnswerToTheQuestion