旋转后移动图像在android中表现不正常

时间:2014-03-20 05:09:16

标签: android

这里我遇到了益智游戏的问题,我有一个图像制作到一些正方形的瓷砖,我洗牌并将位图图块旋转到90 180或270度,并在网格视图中将它们设置为适配器。现在我在网格视图项上应用onTouch侦听器,我可以在gridview上拖放图块,但问题是当我触摸并拖动显示原始图块的90或180或270度图块时,如0度的图块。以下是我的代码,请查看并向我提供建议。

public boolean onTouch(View v,MotionEvent event){

        ClipData data = ClipData.newPlainText("", "");

        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            if (hashMap.containsKey(v)) {
                touchedItemPosition = hashMap.get(v);
                touchedItemPos = touchedItemPosition;
                MyBitamp bitamp = itemList_dump.get(touchedItemPos);

                v.startDrag(data, shadowBuilder, v, 0);

            }

            v.setVisibility(View.INVISIBLE);

            return true;
        } else

        if (event.getAction() == MotionEvent.ACTION_CANCEL) {
            v.setVisibility(View.VISIBLE);
            return false;
        }

        else

        if (event.getAction() == MotionEvent.ACTION_MOVE) {


            return true;
        }

        else if (event.getAction() == MotionEvent.ACTION_UP) {

        }
        return false;

    }



public boolean onDrag(View v, DragEvent event) {
        dropedItemPosition = hashMap.get(v);
        switch (event.getAction()) {
        case DragEvent.ACTION_DRAG_STARTED:


            // do nothing
            break;
        case DragEvent.ACTION_DRAG_ENTERED:

            break;
        case DragEvent.ACTION_DRAG_EXITED:

            break;

        case DragEvent.ACTION_DROP:
            swapItemPositions(dropedItemPosition, touchedItemPosition);

            break;

        case DragEvent.ACTION_DRAG_ENDED:

            Log.i("Drop", "end");

        default:
            break;
        }
        return true;
    }

2 个答案:

答案 0 :(得分:2)

最后我找到了解决方案,问题不在于Action移动案例,问题是DragShadowBuilder。它是预定义的,所有方式都只显示原始数据(BITMAP)。

那么,我做的是什么?我刚创建了一个自定义阴影生成器。 以下链接显示了自定义DragShadowBuilder

Changing dragshadow in android, while dragging happens

在那个类中,我们根据我的要求修改了fromBitmap()方法,只是旋转位图。

答案 1 :(得分:0)

应用旋转动画比在ImageVIew上调用ImageVIew.setRotation(度)更简单。

RotateAnimation rotate = new RotateAnimation(0f, deltaDegrees, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  // substitude deltaDegrees for whatever you want
rotate.setFillAfter(true); // prevents View from restoring to original direction. 

YourImageVIew.startAnimation(rotate);

尝试使用此代替setRotation()。