3

我有一个GridView图像。长按时,屏幕变暗(黑色半透明图像可见),另一个图像变得可见,它与从网格中长按的图像具有相同的资源。

我想要的是能够拖动该图像(我已经成功),但是图像显示在顶角(因为我在 XML 中设计了布局)并且我希望它显示在我单击的位置(准确地说,我希望可拖动图片的中心是我长按的地方)。

我的图像已fill_parent打开FrameLayout并设置为矩阵比例以控制位置...

这是 XML 的图像部分:

<ImageView
    android:id="@+id/imgMainSelectedMovie"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scaleType="matrix"
    android:visibility="invisible"
    android:src="@drawable/escape" />

这是OnTouch()部分:

public boolean onTouch(View v, MotionEvent ev) {
        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            X = ev.getX();
            Y = ev.getY();
            if (longClicked) return true;
            break;
        case MotionEvent.ACTION_MOVE:
            if (longClicked) {
                if (!dragStarted) {
                    dragStarted = true;
                    myImageView.setX(X);
                    myImageView.setY(Y);
                }
            matrix.postTranslate((ev.getX() - X), (ev.getY() - Y));
            X = ev.getX();
            Y = ev.getY();
            myImageView.setImageMatrix(matrix);
            return true;
            }
            break;
        case MotionEvent.ACTION_UP:
            if (longClicked) {
            dark.setVisibility(View.INVISIBLE);
            myImageView.setVisibility(View.INVISIBLE);
            longClicked = false;
            return true;
            }

        }
        return false;
    }

这是我试图解决的问题:

if (!dragStarted) {
        dragStarted = true; //Changed to true when OnItemLongClick called
        myImageView.setX(X);
        myImageView.setY(Y);
            }

但它只是将图像布局的“起点”更改为输入的 X 和 Y。

4

1 回答 1

3

问题解决了:) 我所做的是当onItemLongClick我调用从ACTION_DOWN案例中测量的 X 和 Y 时onTouch,获取矩阵当前位置并从图像的位置减去postTranslate坐标。ACTION_DOWN这是来自的解决方案部分onItemLongCliick

matrix.getValues(values);
matrixX = values[Matrix.MTRANS_X];
matrixY = values[Matrix.MTRANS_Y];
matrix.postTranslate(X-matrixX, Y-matrixY);
myImageView.setImageMatrix(matrix);

我想知道为什么他们没有为矩阵添加某种“setPlace”方法......

于 2013-04-06T06:51:00.107 回答