7

Tôi có một tình huống mà tôi không thể sửa chữa, hy vọng tôi sẽ nhận được một số lời khuyên từ bạn.Làm thế nào để kéo TextView trong LinearLayout mượt mà, trong android?

Tình huống đơn giản: Tôi có LinearLayout trong đó tôi có TextView với nhiều dòng văn bản. Người dùng có thể kéo TextView xung quanh cho đến khi tìm thấy vị trí mà anh ấy thích. Điều thực sự quan trọng là TextView có thể là một phần của LinearLayout (nó sẽ xuất hiện cắt).

Dưới đây là một số mẫu mã:

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

Như bạn có thể thấy LinearLayout có clipChildren = false để cho phép cắt của văn bản. Đối với TextView tôi đặt một người biết lắng nghe cảm ứng

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

Và đây là vấn đề của tôi: Như bạn có thể thấy tôi đã đặt tất cả các thông số bố trí (bên phải, bên trái, phía dưới, lề trên cùng). Tại sao vậy ?

1) Nếu tôi chỉ sử dụng bên trái/trên cùng thì phần kéo sẽ mượt mà nhưng văn bản sẽ được bọc ở đường viền bên phải thay vì bị cắt. Có lẽ do giá trị ký quỹ 0 phải.

2) Nếu tôi sử dụng tất cả lề, văn bản được cắt theo ý muốn của tôi, nhưng chuyển động không trơn tru, nó chỉ nhảy xung quanh một vài pixel.

Làm cách nào để khắc phục sự cố này?

Trả lời

2

Vâng. điều này thật kỳ lạ. Bằng cách chèn TextView bên trong một LinearLayout khác có cùng kích thước với kích thước ban đầu, làm cho mọi thứ trơn tru. Tôi không biết tại sao.

Các vấn đề liên quan