7

私は私が修正することができない状況がある、うまくいけば私はあなたからのいくつかのアドバイスを取得します。LinearLayoutでTextViewのドラッグをスムーズにする方法は?

状況は単純です:複数のテキスト行を持つTextViewを持つLinearLayoutがあります。ユーザは、好きな位置を見つけるまで、TextViewをドラッグすることができます。本当に重要なことは、TextViewが部分的にLinearLayoutから外れることがあることです(カットされたように見えます)。あなたはのLinearLayoutはclipChildrenを持って見ることができるように= falseをテキストのカットオフを可能にするために

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

はここにいくつかのコードサンプルです。私はタッチリスナー

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

そして、ここでの設定のTextViewの場合 は私の問題です:あなたは私がすべてのレイアウトパラメータ(右、左、下、上の余白)を設定して見ることができるように。何故ですか ?

1)左/上だけを使用すると、ドラッグは滑らかになりますが、テキストは切り取られる代わりに右の枠で折り返されます。おそらく右のマージン値のためです。

2)すべてのマージンを使用すると、テキストは必要に応じてカットされますが、動きは滑らかではなく、数ピクセルだけ飛びます。

どうすればこの問題を解決できますか?

答えて

2

これは奇妙です。 TextViewを最初のものと同じサイズの別のLinearLayoutの中に挿入することで、すべてがスムーズになります。なぜ私は考えていない。