这里我遇到了益智游戏的问题,我有一个图像制作到一些正方形的瓷砖,我洗牌并将位图图块旋转到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;
}
答案 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()。