0

LinearLayout ビュー内にドラッグ ジェスチャを実装したいのですが、TextView、ボタンなどのコンポーネントが含まれています。現在、APL レベル 11,3.0 SDK を使用して、Android の公式ドキュメントに従って設計しています。コードに含まれるメソッドは以下のとおりです。

onLongClick() --- view.startDrag(clipdate, dragShadow, null,0) でドラッグ movtion をトリガーします。

onDrag() --- ドラッグ リスナー、view.layout(left, top, right, bottom) を使用、ドラッグされたコンポーネントの外観を更新

私が遭遇する問題は、LinearLayouビューでドラッグすると他のコンポーネントが消え、ドラッグしたものをドロップすると他のコンポーネントと一緒に消えることです。

だから、それがどのようにうまくいかないか、またはあなたの提案でドラッグジェスチャーをうまく実装するにはどうすればよいかを教えてくれる人を教えてください。まず、ここに来るすべてのガスに感謝します。

4

1 に答える 1

0

私が使用したコードは以下のとおりです。

@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 result;
}

@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 result;

// super.onDragEvent(event);を返します }

// drag shadows 
public static class SimeTabDragShadow extends View.DragShadowBuilder {
            private static  Drawable shadow;
            public SimeTabDragShadow(View view) {
                super(view);
                if(DEBUG && 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);
            }


        }

また、LinearLayoutに含まれるコンポーネント(TextView)は静的であり、XMLによってロードされます。問題は、1つのTextViewをドラッグすると他のTextViewが消え、ドロップすると他のTextViewと一緒に消えてしまうことです。

このようになっていることや、LayoutView内にドラッグジェスチャを実装する方法を知っている人はいますか?

于 2011-11-07T01:12:37.110 に答える