【发布时间】:2016-06-01 11:16:40
【问题描述】:
我想在我的测试应用程序中向文本视图添加拖放功能 主布局包含一个 relativelayout(RL1) ,它又包含另一个 relativelayout(RL2) 现在 RL2 包含一个可以拖放到任何地方的文本视图
但是当我在 textview 上执行拖动时,它被拖动但我放下它,它返回到它的 originsl 位置 请帮帮我
我的主要活动
public class MainActivity extends Activity
{
TextView tv;
LayoutParams lParams;
RelativeLayout layout;
private static final String Tv_TAG =" TV_DRAG";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.mainTextView1);
tv.setTag(Tv_TAG);
tv.setOnTouchListener(new MyTouchListener());
layout = (RelativeLayout) findViewById(R.id. draggableRelativeLayout );
layout.setOnDragListener(new MyDragListener());
}
private class MyTouchListener implements OnTouchListener
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
ClipData.Item item = new ClipData.Item((CharSequence) v.getTag());
String[] mimeTypes ={ClipDescription.MIMETYPE_TEXT_PLAIN};
ClipData dragData = new ClipData(v.getTag().toString(), mimeTypes, item);
View.DragShadowBuilder shdwbldr = new View.DragShadowBuilder(v);
v.startDrag(dragData, shdwbldr, v, 0);
v.setVisibility(View.INVISIBLE);
return true;
}
}
private class MyDragListener implements OnDragListener
{
@Override
public boolean onDrag(View v, DragEvent event)
{
View view = (View) event.getLocalState();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
lParams =(RelativeLayout.LayoutParams)view.getLayoutParams();
break;
case DragEvent.ACTION_DRAG_ENTERED:
int x_cord = (int) event.getX();
int y_cord = (int) event.getY();
break;
case DragEvent.ACTION_DRAG_EXITED:
x_cord = (int) event.getX();
y_cord = (int) event.getY();
lParams.leftMargin = x_cord;
lParams.topMargin = y_cord;
view.setLayoutParams(lParams);
break;
case DragEvent.ACTION_DROP:
// Dropped, reassign View to ViewGroup
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
RelativeLayout container = (RelativeLayout) v;
container.addView(view);
view.setVisibility(View.VISIBLE);
break;
case DragEvent.ACTION_DRAG_ENDED:
break;
default: break;
}
return true;
}
}
}
**我的布局**
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:background="#AE9C9B"
android:id="@+id/ draggableRelativeLayout ">
<RelativeLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:background="@null"
android:id="@+id/mainRelativeLayout1">
<TextView
android:layout_height="wrap_content"
android:text="DRAG ME"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="wrap_content"
android:layout_margin="10dp"
android:id="@+id/mainTextView1"/>
</RelativeLayout>
【问题讨论】:
-
了解你正在使用的代码,并阅读你正在拖动的
View.Shadow。视图被隐藏,并且正在移动阴影。 Read the documentation on the functioning 你正在使用什么。 -
@Bonatti 你能详细说明我的错误吗
-
您没有为拖动的视图设置新坐标。
-
@Amy 感谢您的评论,,,那么我应该将 co8rdinates 设置为谁
-
就像所描述的链接一样,您可以阅读您使用的功能正在做什么。一旦你这样做了,你就可以理解所犯的错误。关于downvote,是由于缺乏对问题的阅读/理解。当您询问
But when i perform drag on the textview its getting dragged but went i drop it it returns back to its originsl position please help me时,这表明您不了解拖动系统是什么,并且必须阅读其关于正在发生的事情的文档(因为您描述的是预期行为而不是失败)。
标签: android drag-and-drop android-relativelayout