2

子ビューから親ビューにドラッグ アンド ドロップする方法が必要です。だから私はより良い説明のために画像を入れます:

ここに画像の説明を入力

黄色は、RelativeLayout を拡張するクラスを表します。黒は ViewGroup を拡張するクラスを表します 白は ImageViews を表します 赤は View を表します

したがって、黄色のビューに白いブロック (ImageViews) をドロップする必要がありますが、ImageView には父親のような BlackView があるため、Black View のみをドラッグします。 YellowView では、これによりドラッグ イベントがキャンセルされるため、ビューを変更するときにドラッグを続行する必要があります。WhiteView を RedView に配置する唯一の方法があることに注意してください。タッチアップして White ビューが RedView から離れている場合、White ブロックは BlackView に戻ります。

だから、私はウェブから取得したこのコードを使用しています:

    public boolean onTouch(View v, MotionEvent event) {
    int action = event.getAction();
    switch (action & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            touchDown(event);
            break;
        case MotionEvent.ACTION_MOVE:
            touchMove(event);
            break;
        case MotionEvent.ACTION_UP:
            touchUp(event);
            break;
    }
    if (aViewIsDragged())
        return true;
    return false;
}
private void touchDown(MotionEvent event) {
    initialX = (int)event.getRawX();
    initialY = (int)event.getRawY();
    lastTouchX = (int)event.getRawX() + (gridPageWidth);
    lastTouchY = (int)event.getRawY();
}

public boolean onLongClick(View v) {        
    if(positionForView(v) != -1) {
        movingView = true;
        dragged = positionForView(v);
        return true;
    }
    return false;
}
private void touchMove(MotionEvent event) {

    if (movingView && aViewIsDragged()) {
        lastTouchX = (int) event.getX();
        lastTouchY = (int) event.getY();

        moveDraggedView(lastTouchX, lastTouchY);
        manageSwapPosition(lastTouchX, lastTouchY);
        manageEdgeCoordinates(lastTouchX);
        manageDeleteZoneHover(lastTouchX, lastTouchY);
    }
}
private void moveDraggedView(int x, int y) {
    ImageView child = null;
    View childAt = getChildAt(dragged);
    int width = childAt.getMeasuredWidth();
    int height = childAt.getMeasuredHeight();
    int left = x - (1 * width / 2);
    int t = y - (1 * height / 2);
    childAt.layout(left, t, left + width, t + height);
    //TODO at this point if left less than 0, I detect part of view is out and I need to change this view to Yello
    if (left <0){
            child = (ImageView) childAt;
            ViewGroup parent = (ViewGroup) getParent();
            cloneimage = new ImageView(getContext());
            cloneimage.setBackgroundDrawable(child.getDrawable());
            parent.addView(cloneimage);             
    }
}

少し難しいと思いますが、Wh​​iteViewをBlackからYellowに変更してドラッグし続けるのを手伝ってくれる人がいれば、感謝します。

ありがとう!

4

1 に答える 1