неправильная реализация жеста перетаскивания в sdk 3.0

#android #view #drag #sdk3.0

#Android #Вид #перетаскивание #sdk3.0

Вопрос:

Я хочу реализовать жест перетаскивания в представлении LinearLayout, и в нем содержатся некоторые компоненты, такие как TextView, button. Теперь я использую APL level 11,3.0 SDK для его разработки в соответствии с официальным документом Android. методы, включенные в мои коды, приведены ниже:

onLongClick() — запускает перемещение перетаскивания с помощью view.startDrag(clipdate, dragShadow, null, 0)

onDrag() — прослушиватель перетаскивания, используйте view.макет (слева, сверху, справа, снизу), обновите внешний вид компонента, который был перетащен

и проблема, с которой я сталкиваюсь, заключается в том, что другие компоненты исчезают, когда я перетаскиваю их в LinearLayou view, а когда я отбрасываю перетаскивание, оно исчезает вместе с другими.

итак, пожалуйста, кто-нибудь, кто может помочь мне рассказать, как все идет не так, или как я могу хорошо реализовать жест перетаскивания с вашим предложением. Во-первых, спасибо и ценю каждого, кто приходит сюда.

Ответ №1:

коды, которые я использовал, приведены ниже:

 @Override
public boolean onLongClick(View view) {
    // TODO Auto-generated method stub
    boolean result = true;
    if(DEBUG){
        Log.d(TAG, "onLongClick ()");
    }
    mLongTouch = true;
    ClipData.Item item = new ClipData.Item((CharSequence) view.getTag());
    ClipData dragData = new ClipData((CharSequence) view.getTag(), mTabDragMimeData, item);
    SimeTabDragListener.SimeTabDragShadow myShadow = new SimeTabDragListener.SimeTabDragShadow(view);
    view.startDrag(dragData, myShadow, null, 0);
    return resu<
}

@Override
public boolean onDrag(View view, DragEvent event) {
    // TODO Auto-generated method stub
    boolean result = true;
    int action = event.getAction();
    int eventX = (int)event.getX();
    int eventY = (int)event.getY();
    if(DEBUG){
        Log.d(TAG, "onDrag()...event is  " action   ".... X cor is " event.getX() "...Y  cor is" event.getY());
    }
    view.layout(eventX - mDownOffsetsX, eventY - mDownOffsetsY,
            eventX   mDownViewWidth - mDownOffsetsX, eventY   mDownViewHeight - mDownOffsetsY);
    view.postInvalidate();
    return resu<
  

// вернуть super.onDragEvent (событие);
}

 // drag shadows 
public static class SimeTabDragShadow extends View.DragShadowBuilder {
            private static  Drawable shadow;
            public SimeTabDragShadow(View view) {
                super(view);
                if(DEBUG amp;amp; view instanceof TextView)
                    Log.d(TAG, "drag view is text");
                shadow = new ColorDrawable(Color.LTGRAY);
            }
            @Override
            public void onProvideShadowMetrics(Point shadowSize,
                    Point shadowTouchPoint) {
                // TODO Auto-generated method stub
                super.onProvideShadowMetrics(shadowSize, shadowTouchPoint);
            }
            @Override
            public void onDrawShadow(Canvas canvas) {
                // TODO Auto-generated method stub
                super.onDrawShadow(canvas);
            }


        }
  

и компоненты (TextView), содержащиеся в LinearLayout, являются статическими и загружаются с помощью XML, проблема в том, что другой TextView исчезнет при перетаскивании одного TextView и исчезнет с другими при его отбрасывании.

кто-нибудь знает, как это происходит, или как реализовать жест перетаскивания в LayoutView, спасибо и ценю, что ребята приходят сюда.