1

ImageView クラスを拡張するクラス CustomImageView があります。今、私はこのcustomimageviewを表示している別のフラグメントクラスを持っています. 基本的に、CustomImageView を追加し、それにドラッグ/ドロップ操作を実装したいと考えています。

カスタム イメージを追加できますが、イメージが制御されません。

以下は私のonTouchコードです

@Override public boolean onTouch(View v, MotionEvent event) { CustomImageView ビュー = (CustomImageView) v; dumpEvent(イベント);

// Handle touch events here...
switch (event.getAction() & MotionEvent.ACTION_MASK) 
{
case MotionEvent.ACTION_DOWN:
    System.out.println("ACTION_DOWN");
    savedMatrix.set(matrix);
    start.set(event.getX(), event.getY());
    mode = DRAG;
    break;
case MotionEvent.ACTION_UP:
    System.out.println("ACTION_UP");

case MotionEvent.ACTION_POINTER_UP:
    mode = NONE;
    break;

case MotionEvent.ACTION_POINTER_DOWN:
    System.out.println("ACTION_POINTER_DOWN");

    oldDist = spacing(event);
    if (oldDist > 10f) {
        savedMatrix.set(matrix);
        midPoint(mid, event);
        mode = ZOOM;
    }
        lastEvent = new float[4];
        lastEvent[0] = event.getX(0);
        lastEvent[1] = event.getX(1);
        lastEvent[2] = event.getY(0);
        lastEvent[3] = event.getY(1);
        d = rotation(event);
    break;

case MotionEvent.ACTION_MOVE:
    if (mode == DRAG)
    {
        System.out.println("ACTION_MOVe inside DRAG");

        matrix.set(savedMatrix);
        matrix.postTranslate(event.getX() - start.x,
        event.getY() - start.y);
    }
    else if (mode == ZOOM) {
        System.out.println("ACTION_ZOOM");

        float newDist = spacing(event);
        if (newDist > 10f) {
            matrix.set(savedMatrix);
            float scale = newDist / oldDist;
            matrix.postScale(scale, scale, mid.x, mid.y);
        }
        if (lastEvent != null && event.getPointerCount() == 3)
        {
            newRot = rotation(event);
            float r = newRot - d;
            float[] values = new float[9];
            matrix.getValues(values);
            float tx = values[2];
            float ty = values[5];
            float sx = values[0];
            float xc = (view.getWidth() / 2) * sx;
            float yc = (view.getHeight() / 2) * sx;
            matrix.postRotate(r, tx + xc, ty + yc);
        }
    }
    break;
}
    view.setImageMatrix(matrix);
    return true; // indicate event was handled
}

}

4

0 に答える 0