2
我想實現拖動和拖放使用onTouchListener上的阻力區視圖中拖動視圖和onDragListener如下:
這裏是MyDragListener ..
class MyDragListener implements OnDragListener {
Drawable enterShape = getResources().getDrawable(R.drawable.ic_launcher);
Drawable normalShape = getResources().getDrawable(R.drawable.ic_launcher);
@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
switch (event.getAction()) {
/*Some irrelevant cases*/
case DragEvent.ACTION_DROP:
// Dropped, reassign View to ViewGroup
View view = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
FrameLayout container;
container = (FrameLayout) v;
container.addView(view);
view.setX(event.getX());
view.setY(event.getY());
view.setVisibility(View.VISIBLE);
break;
default:
break;
}
return true;
}
}
而且我分配此監聽器的阻力區是像這樣在我的例子 一個的FrameLayout:
FrameLayout f= (FrameLayout) findViewById(id.FrameLayout);
f.setOnDragListener(new MyDragListener());
這裏是佈局:
<FrameLayout
android:id="@+id/FrameLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="0.8">
<ImageView
android:contentDescription="This is the main panel of the program"
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/blank"
android:isScrollContainer="true"
/>
<Button
android:id="@+id/DraggableButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Drag me -_-"
/>
現在的問題是,我只能得到原X,Y座標,並且沒有產生精確的結果....
我試圖用onTouchListener(並給DragListener上的ip)來處理這個問題,它給了我容器上的座標,並且在拖拽時獲得了精確的結果,但是當我放棄視圖時它就消失了。 這裏是MyTouchListener代碼:
private final class MyTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
}
else
if(motionEvent.getAction()==MotionEvent.ACTION_UP)
{
// View view = (View) motionEvent.getLocalState();
view.setX(motionEvent.getX());
view.setY(motionEvent.getY());
view.setVisibility(View.VISIBLE);
return true;
}
return false;
}
}
任何人能告訴我什麼是我該怎麼辦?