如何在android中使LinearLayout中的TextView拖动平滑?
Posted
技术标签:
【中文标题】如何在android中使LinearLayout中的TextView拖动平滑?【英文标题】:How to make the TextView drag in LinearLayout smooth, in android? 【发布时间】:2013-01-18 23:44:10 【问题描述】:我有一个无法解决的情况,希望我能得到你的一些建议。
情况很简单:我有一个 LinearLayout,其中有一个 TextView,其中包含多行文本。用户可以拖动 TextView 直到找到他喜欢的位置。真正重要的是TextView可以部分脱离LinearLayout(会显得剪掉了)。
以下是一些代码示例:
<LinearLayout
android:layout_
android:layout_
android:layout_gravity="top|center_horizontal"
android:clipChildren="false"
android:gravity="center_horizontal|center_vertical"
android:orientation="vertical" >
<TextView
android:layout_
android:layout_
android:gravity="center"
android:textColor="@color/text_color"
android:textSize="16sp" />
</LinearLayout>
如您所见,LinearLayout 具有 clipChildren = false 以允许截断文本。 对于 textview 我设置了一个触摸监听器
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;
);
这是我的问题:如您所见,我已经设置了所有布局参数(右、左、下、上边距)。这是为什么呢?
1) 如果我只使用左/上拖动,则足够平滑,但文本会被包裹在右边框而不是被剪切。可能是因为右边的 0 边距值。
2) 如果我使用所有边距,文本会按照我的意愿被剪切,但移动并不顺畅,它只是跳跃了几个像素。
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:嗯。这很奇怪。通过将 TextView 插入另一个与初始大小相同的 LinearLayout 中,可以使一切顺利。我不知道为什么。
【讨论】:
以上是关于如何在android中使LinearLayout中的TextView拖动平滑?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Android Studio中使图像中的特定颜色透明?
Android:如何将 LinearLayout 的内容垂直包装在 TableRow 中?