0
我正在創建一個Android應用程序,該應用程序實現拖放操作以在不同位置放置視圖。代碼運行完美,但有一個小故障。有時當我拖動一個視圖時,它會突然隱藏起來,或者從相應的活動中看不見。爲了讓它回到活動中,我必須重新加載活動,方法是返回到上一個並再次返回。拖放從佈局中刪除視圖
的阻力監聽器的代碼如下:
public class MyDragListener implements View.OnDragListener
{
@Override
public boolean onDrag(View v, DragEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
return false;
case DragEvent.ACTION_DRAG_ENTERED:
return false;
case DragEvent.ACTION_DROP:
view=(View)event.getLocalState();
int h = view.getHeight();
int w = view.getWidth();
h=h/2;
w=w/2;
if((event.getX()-w)<0||(event.getY()-h)<0){
}else if((event.getX()+w)>width||(event.getY()+h)> height){
}
else{
view.setX(event.getX()-w);
view.setY(event.getY()-h);
owner = (ViewGroup) view.getParent();
owner.removeView(view);
RelativeLayout container=(RelativeLayout)v;
container.addView(view);
relativeLayout.removeAllViews();
relativeLayout.addView(text_name);
relativeLayout.addView(text_dob);
relativeLayout.addView(edit_name);
relativeLayout.addView(edit_dob);
relativeLayout.invalidate();
view.invalidate();
text_name.invalidate();
text_dob.invalidate();
edit_name.invalidate();
edit_dob.invalidate();
}
return true;
case DragEvent.ACTION_DRAG_ENDED:
return false;
case DragEvent.ACTION_DRAG_EXITED:
return false;
default:
return false;
}
}
}
觸摸監聽器的代碼如下:
public class MyTouchListenerForEditText implements OnTouchListener
{
@Override
public boolean onTouch(View view, MotionEvent event) {
// TODO Auto-generated method stub
int action = event.getAction() & MotionEvent.ACTION_MASK;
if(action==MotionEvent.ACTION_UP)
{
time_up=System.currentTimeMillis();
if(time_up-time_down<2000)
{
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
((EditText)view).setInputType(InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
view.requestFocus();
((EditText)view).setSelection(((EditText)view).getText().length());
}
}
}
else if(action==MotionEvent.ACTION_MOVE)
{
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(
view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
}
else if(action==MotionEvent.ACTION_DOWN)
{
edit_name.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
edit_dob.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
edit_hobbies.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
edit_ideal_person.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
edit_strengths.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
edit_weakness.setInputType(InputType.TYPE_NULL|InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
time_down=System.currentTimeMillis();
return true;
}
return false;
}
}
也請讓我知道我們是否可以實現拖動和上落動態添加視圖到任何活動?
謝謝,它解決了我的這個問題。我在同一個代碼中面臨更多問題。每當我將edittext拖到另一個edittext上時,被拖動的edittext就會不可見。你能告訴我爲什麼發生這種情況嗎? –
你能分享修改過的代碼嗎?讓我們試着弄清楚現在發生了什麼。 – Abdul
我已經用前面告訴過的修改更新了代碼。 –